Java I/O系统详解(一)——File类
2016-08-22 23:00
169 查看
在学习那些真正用于在流中读写数据的类之前,我们先来学习一个帮助我们处理文件目录问题的类,即File类。
File类的功能我将它分为以下三点来介绍:
1.目录列表器: 如果我们想获得File对象包含的全部列表,我只需调用无参的list()方法。如果我们想或者一个受限(正则表达式)列表,那么我们就需要一个”文件名过滤器“,这个接口的accept方法告诉list方法是否显示某个文件名。
这里大家可能有点疑惑,accept方法怎么告诉list是否要显示该文件名呢?
我们先来看一下FilenameFilter接口的accept方法的API说明。
boolean accept(File dir,String name)
测试指定文件是否应该包含在某一文件列表中。
参数:dir - 被找到的文件所在的目录。 name - 文件的名称。
注意:由于FilenameFilter是一个接口,accept方法并没有被实现,所以你需要定义一个类实现这个接口,从而实现你自己想要的accept方法,将这个类的实例传递给list方法。
关于accept方法的实现我们等会再说,我们再来看一下list(FilenameFilter filter)方法是如何使用这个accept方法的,File类中的list(FilenameFilter filter)方法源代码如下:
可见list方法认为只要list()中的文件名names[i]使accept方法返回true,那么就将这个文件名放入返回的数组之中。
现在,假如我们想在当前目录下找到后缀为.java的文件,那么我们就可以用下面的代码来实现:
注意代码中的采用匿名内部类实现FilenameFilter接口。由于传给匿名内部类的参数必须是final的,所以main函数的参数为final。
2.目录实用工具: 我们可以利用File的性质和FilenameFilter接口以及regex包中Pattern类和Macher类来获取某个目录下的满足要求的文件集。
3.File的其他常用功能: File不仅仅只代表存在的文件或目录,也可以用File对象来创建新的目录或尚不存在的整个目录路径。除此之外,我们还可以通过File查看文件的种种特性,检查某个File对象代表的是一个文件还是一个目录,并且还可以删除文件。下面给出常用方法的API:
boolean creatNewFile()
当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
boolean delete()
删除此抽象路径名表示的文件或目录。
File getAbsoluteFile()
返回此抽象路径名的绝对路径名形式。
String getName()
返回由此抽象路径名表示的文件或目录的名称。
boolean isDirectory()
测试此抽象路径名表示的文件是否是一个目录。
long lastModified()
返回此抽象路径名表示的文件最后一次被修改的时间。 表示文件最后一次被修改的时间的 long 值,用与时间点(1970 年 1 月 1 日,00:00:00 GMT)之间的毫秒数表示;如果该文件不存在,或者发生 I/O 错误,则返回 0L
boolean mkdirs()
创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
String toString()
返回此抽象路径名的路径名字符串。
boolean renameTo(File dest)
重新命名此抽象路径名表示的文件。
File[] listFiles()
返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
File类:
File类既能代表一个特定文件的名称,又能代表一个目录下一组文件的名称。File类的功能我将它分为以下三点来介绍:
1.目录列表器: 如果我们想获得File对象包含的全部列表,我只需调用无参的list()方法。如果我们想或者一个受限(正则表达式)列表,那么我们就需要一个”文件名过滤器“,这个接口的accept方法告诉list方法是否显示某个文件名。
这里大家可能有点疑惑,accept方法怎么告诉list是否要显示该文件名呢?
我们先来看一下FilenameFilter接口的accept方法的API说明。
boolean accept(File dir,String name)
测试指定文件是否应该包含在某一文件列表中。
参数:dir - 被找到的文件所在的目录。 name - 文件的名称。
注意:由于FilenameFilter是一个接口,accept方法并没有被实现,所以你需要定义一个类实现这个接口,从而实现你自己想要的accept方法,将这个类的实例传递给list方法。
关于accept方法的实现我们等会再说,我们再来看一下list(FilenameFilter filter)方法是如何使用这个accept方法的,File类中的list(FilenameFilter filter)方法源代码如下:
public String[] list(FilenameFilter filter) { String names[] = list(); if ((names == null) || (filter == null)) { return names; } List<String> v = new ArrayList<>(); for (int i = 0 ; i < names.length ; i++) { if (filter.accept(this, names[i])) { v.add(names[i]); } } return v.toArray(new String[v.size()]); }
可见list方法认为只要list()中的文件名names[i]使accept方法返回true,那么就将这个文件名放入返回的数组之中。
现在,假如我们想在当前目录下找到后缀为.java的文件,那么我们就可以用下面的代码来实现:
import java.io.File; import java.io.FilenameFilter; import java.util.Arrays; import java.util.regex.Pattern; public class Dirlist { public static void main(final String[] args) { // TODO Auto-generated method stub File path=new File("."); String[] list=null; if(args.length==0) list=path.list(); else list=path.list(new FilenameFilter() { //编译正则表达式 private Pattern pattern = Pattern.compile(args[0]); @Override public boolean accept(File dir, String name) { //name整个字符串是否匹配正则表达式 return pattern.matcher(name).matches(); } }); Arrays.sort(list,String.CASE_INSENSITIVE_ORDER); for(String s:list) System.out.println(s); } } //args[0]:"^.+\.(java)$"
注意代码中的采用匿名内部类实现FilenameFilter接口。由于传给匿名内部类的参数必须是final的,所以main函数的参数为final。
2.目录实用工具: 我们可以利用File的性质和FilenameFilter接口以及regex包中Pattern类和Macher类来获取某个目录下的满足要求的文件集。
3.File的其他常用功能: File不仅仅只代表存在的文件或目录,也可以用File对象来创建新的目录或尚不存在的整个目录路径。除此之外,我们还可以通过File查看文件的种种特性,检查某个File对象代表的是一个文件还是一个目录,并且还可以删除文件。下面给出常用方法的API:
boolean creatNewFile()
当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
boolean delete()
删除此抽象路径名表示的文件或目录。
File getAbsoluteFile()
返回此抽象路径名的绝对路径名形式。
String getName()
返回由此抽象路径名表示的文件或目录的名称。
boolean isDirectory()
测试此抽象路径名表示的文件是否是一个目录。
long lastModified()
返回此抽象路径名表示的文件最后一次被修改的时间。 表示文件最后一次被修改的时间的 long 值,用与时间点(1970 年 1 月 1 日,00:00:00 GMT)之间的毫秒数表示;如果该文件不存在,或者发生 I/O 错误,则返回 0L
boolean mkdirs()
创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
String toString()
返回此抽象路径名的路径名字符串。
boolean renameTo(File dest)
重新命名此抽象路径名表示的文件。
File[] listFiles()
返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
相关文章推荐
- 【java】File类的详解使用方法
- 关于java基础--File类与FileFilter过滤器的详解与测试
- (一)、Java I/O系统——File类的使用
- java中File类详解
- ⚔疯狂输出⚔ Java中 File类 的详解
- File类详解--Java基础083
- 【java】File类的详解使用方法
- Java File类的详解
- 【56】java本地文件File类详解
- JAVA基础初探(十二)Map接口及其常用实现类(HashMap)、File类详解(概述、创建、删除、重命名、文件属性读取/设置、遍历文件夹)
- Java----File类详解
- java中File类详解
- 【56】java本地文件File类详解
- 【Java菜鸟 04】Java中的File类详解
- Java File类用法详解
- Java基础--I/O系统 ----File类
- 【56】java本地文件File类详解
- Java File类方法使用详解
- Java中File类详解
- JAVA IO(二)File类详解