Java▲在被疯狂嘲讽之后,我决定研究下Java中的过滤器源码( 二 )


⑥if ((filter == null) || filter.accept(f))
如果过滤器filter为空或者filter接口中accept方法的返回值为真 , 也就是我们实现接口后 , 重写accept方法的返回值 。
只要它们有一样为真 , 就将⑤中的文件对象添加到③中的集合当中 , 也就是代码中的files.add(f)
⑦return files.toArray(new File[files.size()
);
返回一个file数组 , 将③中的files集合转换成一个file数组 , 数组长度 , 也就是files集合的大小 。
以上就是jdk已经封装好了的文件过滤器 , 我们在直接使用listFiles方法中的 。
三、使用jdk提供的文件过滤器1.过滤单级文件夹
直接调用listFiles(FileFilter filter)方法就可以了:
①创建文件对象
路径也就是右边作为测试的文件夹 。
②调用listFiles(FileFilter filter)方法
因为参数是FileFilter接口 , 我们使用匿名内部类代替其子类对象 , 重写accept方法 , 并写出过滤条件 。
③重写accept方法
方法为endsWith(\"jpg\") , 也就是过滤出后缀名为“jpg”的图片 。
④遍历过滤后的files数组并打印 。
运行结果 , 会发现控制台输出了该文件夹下的所有图片文件 。
很简单 , 直接调用jdk已经封装好了的方法就好了 。
但是这样还是有一个问题 , 它只能过滤出该文件夹下的图片文件 , 不能过滤多级文件夹 , 那该怎么办?
2.过滤多级文件夹
要解决这个问题 , 得使用到递归 , 当然昨天有小伙伴评论说迭代 , 这我不懂 , 暂时只学了递归 , 也只会它 。
①创建file对象 , 并定义find方法

要使用递归 , 首先定义一个方法 , 不然也没法自己调用自己 。
②如果是文件(isFile方法)
递归结束 , 并打印过滤后的文件 。
③调用listFiles(FileFilter filter)方法
参数是接口 , 传参数时需要使用其实现类 。
④设定过滤条件
在第二节中使用了匿名内部类 , 这里使用lambda表达式 , 也就是函数式编程 。
后缀名为“jpg“的文件保留下来 。
同时如果是子文件夹也要保持下来 , 这点很关键 , 一个文件夹里面是可能会有子文件夹的 , 并且子文件夹里也有可能有图片文件 。
⑤将过滤后的文件遍历 , 并递归
代码写完后 , 执行就可以过滤出多级文件夹里的图片文件了 。
总结
谢谢你的观看 。
【Java▲在被疯狂嘲讽之后,我决定研究下Java中的过滤器源码】如果可以的话 , 麻烦帮忙点个赞 , 谢谢你 。


推荐阅读