FileFilter是一个用于完成文件过滤的接口,FileFilter接口提供了一个用于社子和过滤规则的抽象方法,若在获取文件列表时需要进行过滤,则可提供FileFilter对象并实现accept方法以完成文件过滤,如下
//创建File对象,表示d盘下的fileTest目录
File file = new File("d:/fileTest");
//过滤所有的标准文件(匿名内部类)
files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
return file.isFile();
}
});
文件过滤原理:
通过查看 listFiles(FileFilter filter)方法源码不难发现,文件过滤原则即从文件列表中遍历所有文件,并根据accept实现的过滤规则判断每一个文件是否满足过滤条件,若满足则将该文件存储到新的容器ArrayList中,最终将ArrayList以File数组的形式返回,即完成过滤过程,源码如下:
public File[] listFiles(FileFilter arg0) {
//获取目标文件的文件名数组
String[] arg1 = this.list();
if (arg1 == null) {
return null;
} else {
//创建新数组用于存储符合过滤条件的文件
ArrayList arg2 = new ArrayList();
String[] arg3 = arg1;
//获取所有文件总数
int arg4 = arg1.length;
//循环遍历每一个文件
for (int arg5 = 0; arg5 < arg4; ++arg5) {
//取出每一个遍历到的文件名并使用临时变量存储
String arg6 = arg3[arg5];
//根据文件名构建一个新的文件对象
File arg7 = new File(arg6, this);
//判断新文件对象是否符合accept方法实现的过滤规则
if (arg0 == null || arg0.accept(arg7)) {
//若符合过滤规则则将该文件加入新集合中
arg2.add(arg7);
}
}
//将集合转换为File数组并返回,完成过滤
return (File[]) arg2.toArray(new File[arg2.size()]);
}
}