IO这一部分内容还是比较多的,对于基础的枯燥但是又重要的内容还是将它记下来比较好。

关于File类

Ø File类直接继承与Object类,File类描述了文件本身的一些属性,File类用来获取或者处理与磁盘上的文件相关的信息,例如文件权限、文件创建时间、文件路径等等,File类还可以用来浏览目录的层次结构。

Ø 一个File类对象表示磁盘上的文件或目录(目录也是一种特殊的文件)

Ø File类提供了一个与平台无关的方法,只可直接对磁盘上的文件或者目录进行操作,屏蔽了底层的相关技术。

Ø File类可以直接处理文件或者文件系统。

Ø File类并没有指定是从文件中读出信息还是将信息写入到文件中。

常用的构造方法:

File(String str) str表示文件的路径,在Java中对于Windows系统而言,比如这个路径: “D:\Java\jdk6”在windows系统中,路径的分隔符都使用‘\’这个和java中的转义字符一样了,因此要写成“\\”才能恢复本身的字符‘\’的功能。对于Linux的系统而言,文件路径之间的分隔符采用的是“/”左斜杠,这就不存在使用转移字符的问题了。对于从windows系统变到Linux系统上的Java程序,文件路径一定要对应地进行调整。

File(File parent,String str)这个表示在父目录parent下(parent在这里是一个目录文件),创建一个名为str的文件。只要是前后两部分拼接起来构成一个完整的文件路径就OK了。

File类一些常用的函数的示例:

package com.file.fileMethod;
import java.io.File;
import java.io.FilenameFilter; public class methodTest { public static void main(String[]args){
File file=new File("F:\\filetest1\\filetest2\\filetest3");
System.out.println(file.isDirectory());
System.out.println(file.isFile());
//要是父目录没有生成的话 就会报错
System.out.println(file.mkdir());
//即使父目录没有 也会与多级目录一起 一并生成
System.out.println(file.mkdirs());
//List方法 列出当前目录下所有的子文件 以及子目录
String[]names=file.list();
for(String name:names){
System.out.println(name);
}
//listFile方法 返回一个File数组 数组中的每个元素都是一个File对象 这样操作起来更容易
File[]files=file.listFiles();
for(File everyfile:files){
System.out.println(everyfile.getName()); }
//getparent返回父类的File对象(String)
System.out.println(file.getParent());
//获取固定类型的文件 比如固定的后缀的
//法一:使用list方法获取文件名数组 利用endwith判断结尾
String[]names2=file.list();
for(String name:names2){
if(name.endsWith(".java")){
System.out.println(name);
}
} //法二:有点类似于策略模式 主要是实现accept方法 需要先定义一下 FilenameFilter类 这里通过内部类的方式来实现
//在方法的参数声明的地方 直接传入一个类的实例
String[]names3=file.list(new FilenameFilter(){
public boolean accept(File dir,String name){
if(name.endsWith(".java"))
return true;
else
return false;
}
}); //delete方法 用于删除目录 如果目录中包含文件则没法删除
//要是目录中还设有目录 只能通过递归的方式删除(文件操作中常用的技巧)
System.out.println(file.delete());
//自定义deleteall方法 通过递归的方式删除 执行此方法之后filetest2之下 为空
deleteAll(new File("F:\\filetest1\\filetest2")); }
// 删除目录以及其中的文件 (这个是文件操作中比较固定的模式)
public static void deleteAll(File file){
//如果是文件 或者为一个空目录 则删除 这个是递归的出口
if(file.isFile()||file.list().length==0){
file.delete();
return;
}
//往下递归
else{
File[]files=file.listFiles();
for(File f:files){
//递归删除
deleteAll(f);
} } return;
} }

一个比较典型的题目,有的时候面试也会考到的:创建一个当前目录下的目录树,要求每一层目录都有缩进,并且使得目录排在文件的前面

实现如下:

package com.file.filetree;

import java.io.File;
import java.util.ArrayList; public class fileTree {
public static void main(String[]args){ File directory=new File("F:\\test");
traverse(directory,0);
} //n表示空格的个数
public static void Print(String str,int n){
//先打印换行符
System.out.print('\n');
int i;
for(i=0;i<n;i++)
{System.out.print(" ");}
System.out.print(str);
return; } //最简单的排序思路 遍历两次 第一次把目录文件放入 第二次把文件放入
public static File[] sort(File[] files){
ArrayList<File>sorted=new ArrayList<File>();
for(File f:files){
if(f.isDirectory()){
sorted.add(f);
}
}
//再遍历一次 把文件放入
for(File f:files){
if(f.isFile()){
sorted.add(f);
}
}
//将一个Arraylist转化为一个File数组
//方法是先声明一个对应长度的File类型的数组空间 再将这个Arraylist中的内容由toArray方法赋给数组
File[]newfiles=new File[sorted.size()];
sorted.toArray(newfiles);
return newfiles; } //递归遍历目录
public static void traverse(File file,int n){ File[]files =file.listFiles();
//当前为文件 或者为空目录 打印 这个判断条件基本上是类似的问题中常常遇到的
if(file.isFile()||files.length==0)
{
Print(file.getName(),n);
return;
}
else
{
//先对当前的File对象排一下序 目录放前面 文件放后面
files=sort(files);
//如果当前是一个非空的目录 先把当前目录打印了 再递归
Print(file.getName(),n);
for(File f:files){
traverse(f,n+20);
} } } }

缩进的实现主要是通过对前面输出的空格数目进行控制,对于每一层来说,在输出文件名之前都要输出对应数目的空格。先文件夹,后文件的输出方式也是通过对每一层的非空目录进行简单的排序来实现的。

Java IO(1)的更多相关文章

  1. java.IO输入输出流:过滤流:buffer流和data流

    java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...

  2. Java:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  3. Java IO之字符流和文件

    前面的博文介绍了字节流,那字符流又是什么流?从字面意思上看,字节流是面向字节的流,字符流是针对unicode编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...

  4. java Io流向指定文件输入内容

    package com.hp.io; import java.io.*; public class BufferedWriterTest{ public static void main(String ...

  5. java Io文件输入输出流 复制文件

    package com.hp.io; import java.io.FileInputStream; import java.io.FileNotFoundException; import java ...

  6. java Io流更新文件内容

    package com.hp.io; import java.io.FileOutputStream; import java.io.IOException; public class FileOut ...

  7. java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  8. java.io.NotSerializableException: test.io.file.Student

    java.io.NotSerializableException: test.io.file.Student    at java.io.ObjectOutputStream.writeObject0 ...

  9. java.io.IOException: mark/reset not supported

    java.io.IOException: mark/reset not supported at java.io.InputStream.reset(InputStream.java:348) at ...

  10. Java IO流学习总结

    Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

随机推荐

  1. 15、前端知识点--MVVM

    MVVM模式的理解 MVVM模式里面,核心是数据. 各种前端框架,最核心的说就是保持了数据与视图的同步. 数据驱动思想:数据驱动视图. Vue不建议手动操作DOM. 以前是指令操作DOM,其实本质上底 ...

  2. Sprak2.0 Streaming消费Kafka数据实时计算及运算结果保存数据库代码示例

    package com.gm.hive.SparkHive; import java.util.Arrays; import java.util.Collection; import java.uti ...

  3. Spark2.0集成Hive操作的相关配置与注意事项

    前言 已完成安装Apache Hive,具体安装步骤请参照,Linux基于Hadoop2.8.0集群安装配置Hive2.1.1及基础操作 补充说明 Hive中metastore(元数据存储)的三种方式 ...

  4. SQLServer死锁查询

    --查询死锁 select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName from sys ...

  5. Maven生成可以直接运行的jar包的多种方式(转)

    转自:https://blog.csdn.net/xiao__gui/article/details/47341385 Maven可以使用mvn package指令对项目进行打包,如果使用java - ...

  6. windows 2003 系统管理员debug

  7. springboot集成hibernate

    package com.jxd.Boot.hibernate.dao.impl; import java.util.List; import javax.persistence.EntityManag ...

  8. [python 学习] argparse模块

    https://docs.python.org/3/library/argparse.html#module-argparse

  9. django之路由的理解

    一:路由 简单的路由过程图: 1. 路由的定义位置 路由定义方式一:主路由和子路由分开定义 主路由的定义 urls.py from django.conf.urls import url from d ...

  10. springboot--异步执行的方法及定时执行的方法

    让方法被调用后异步的执行 一般来说,要异步执行一个任务都是创建一个线程来专门干这个任务.在springboot中有 @Async 这个注解快速实现方法的异步执行.只需要两步:第一步: 在启动类上加上@ ...