34 文件过滤器
2020-03-24 本文已影响0人
ca8519be679b
上节课我们做递归查找指定后缀文件时,使用的字符串方法endswith,这里研究使用文件过滤器

之前讲过listFiles()返回路径下面的所有文件及文件夹,这里其实还有重载方法,可以传入文件过滤器对象
FileFilter在java.io包下,是个基于扩展名过滤的接口
抽象方法abstract boolean accept(File f) 此过滤器是否接受给定的文件。
FilenameFilter在java.io包下,是个基于文件名过滤的接口
方法boolean accept(File dir,String name)测试指定文件是否应该包含在某一文件列表中。
2个过滤器都有accept方法,但是参数不一样
这2个接口都是没有实现类的,需要我们自己写实现类重写方法
这里通过设置要返回的对象集合的true,false来实现过滤

我们可以手写实现类,也可以直接写匿名内部类,重写accept方法,如上,对文件夹和py文件都返回True,然后分别判断

如上,是使用了FilenameFilter,其accept参数,dir是相对目录的File对象,后面是文件名字符串,我们可以对File(dir,name)重载构造实例,调用isDirectory,然后name单独判断即可

当然我们知道这个是接口,我们可以直接使用lambda表达式,满足条件是接口,且只有一个抽象方法

当然因为lambda表达式就一行,我们可以把参数类型省略掉,把return{}分号也都省略掉,如上

当然,FileFilters也可以用lambda表达式过滤,所以,因为一个参数,我们可以将参数类型和小括号拿掉