在File类的 list()方法中可以接收一个 FilenameFilter 参数(Filter译:过滤),通过该参数可以只列出符合条件的文件。这里的FilenameFilter 接口 和 javax.swing.filechooser 包下的 FileFilter 抽象类的功能非常相似,可以把 FileFilter 当成 FilenameFilter 的实现类,(实际并不是它实现类)
- FilenameFilter 接口里包含了一个 accept(File dir, String name)方法该方法将依次对指定 File 的所有子目录或者文件进行迭代;如果该方法返回true,则 list() 方法会列出该子目录或者文件。
- boolean accept(File dir, String name)
- 该方法测试指定文件是否包含在文件列表中。
- dir - 找到该文件的目录。
- name - 文件的名称。 (包括目录)
- true 当该名称包含在文件列表中时; false否则。 (名称包含目录,和文件)
- . 点代表当前根目录
public static void main(String[] args) {
File file = new File(".");
// 使用 Lambda 表达式(目标类型为 FilenameFilter)
// 如果文件名以.java 结尾,或该文件是一个目录(文件夹)
String d;
String[] nameList = file.list((dir, name) -> name.endsWith(".java")
|| new File(name).isDirectory());
for (String name : nameList) {
System.out.println(name);
}
}
- 先附上我当前根目录图片
- 对应结果:
.settings
bin
src
文件.java
目录.java
- accept() 方法就是指定自己的规则
- 我指定的是 只有是目录 或 (目录,文件) 以.java 为后缀都符合
- 关于lambda表达式可点击参考 -《Lambda》