简要谈谈io中抽象类FileFilter的用法
FileFilter是jdk1.2版本新加入的接口。在java.io包中,是实现文件过滤功能的一个接口。
那这个接口怎么用呢?,File类对象的方法.listFiles(),有一个重写方法listFiles(FileFilter filter) 。查阅Java的api,并没有找到此接口的实现类。所以我们手写一个实现类,然后根据实现类多态调用,创造出接口实现类的对象。接口中有一个抽象方法accept(File pathname)返回值是Boolean类型,这个方法是什么意思呢·?他是测试指定抽象路径名是否应该包含在某个路径名列表中(api中的解释)。这个解释对于新人很不友好,所以用我们的白话就是listFiles方法每次获得的一个完全路径,都传给pashname,然后有这个方法看看要不要过滤掉,不过滤就返回true,过滤就返回false。举个例子public boolean accept(File pathname) { //pathname是listfile拿到的每一条路径 if (pathname.isDirectory()) return true; return pathname.getName().endsWith(".java"); 如果根据pathname得的是文件夹,就返回真,说明文件夹可以。如果是以.java 结尾的字符串也行。我把前面调用这个对象的代码也贴上
/*
- 递归遍历Workspace全部的.java结尾文件
*/
import java.io.File;
public class DiGuiText {
public static void main(String[] args) {
File file = new File(“E:\javaWorkSpace”);
function(file);
}
public static void function(File file) {
File[] filearr = file.listFiles(new FilterDemo());//此行调用了FileDFilter接口实现类的匿名对象
for (File f : filearr) {
if (f.isDirectory()) {
function(f);
} else
System.out.println(f);
}
}
}`
其中,我把实现接口的类叫 FilterDemo,这两个类实现的功能就是用递归遍历E盘下面的文件夹,.java结尾的文件都找出来。(初写博客,临博涕流,不知所云。溜之溜之~)