【简述】
在File类的list方法中可以接收一个FilenameFilter参数,通过该参数可以列出只满足要求的文件。
FilenameFilter接口里包含了一个accept(File dir, String name)方法,该方法会依次对指定的File的所有子目录或者文件进行迭代,如果该方法返回true,则list()方法会列出该子目录或文件。
File类中的使用过滤器的list方法
FilenameFilter接口内的accept(File dir,String name)方法
【案例】
package com.Higgin.part1; import java.io.File; import java.io.FilenameFilter; /** * FilenameFilter接口的实现类 * 在accept方法内添加文件名的过滤器条件 */ class FilterName implements FilenameFilter{ @Override public boolean accept(File dir, String name) { return name.endsWith(".txt"); } } /** * 文件名过滤 */ public class FilenameFilterDemo { public static void main(String[] args) { File file=new File("c://testJavaIO"); System.out.println("===============使用lambda表达式获取后缀为.java的文件================="); //使用lambda表达式,获得后缀是.java的文件 String[] nameList=file.list((div,name)->name.endsWith(".java")); //极大简化了代码 for(String fileName:nameList){ System.out.println(fileName); } System.out.println("===============使用lambda表达式获取后缀为.txt的文件================="); //不使用lambda表达式获取后缀为.txt的文件 String[] nameList2=file.list(new FilterName()); //直接使用FileNameFilter的实现类FilterName for(String fileName:nameList2){ System.out.println(fileName); } } }
【对应的文件夹内的内容】
【运行结果】
【小结】
上面的两个方法都实现了accept()方法,实现accept()方法起始就是实现自己的过滤规则,指定那些文件应该由list方法来列出。
FilenameFilter接口内只有一个抽象方法,因此该方法是一个函数式接口,可以使用lambda表达式创建实现该接口。