File类之文件过滤(FileFilter)

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()]);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42668504/article/details/81269609