Java FileNameFilter示例
时间:2020-02-23 14:36:34 来源:igfitidea点击:
当使用File类listFiles()方法时,可以实现Java FilenameFilter接口来过滤文件名。
Java FilenameFilter
Java FileNameFilter接口具有应实现的方法"布尔值接受(文件目录,字符串名)",并且将测试每个文件以将该方法包含在文件列表中。
从Java 8开始,FileNameFilter是一个功能接口,因为它具有单个方法。
Java FilenameFilter示例
我们可以在Java中使用FilenameFilter在目录中查找特定扩展名的所有文件。
下面是显示如何在Java中使用FileNameFilter的程序。
package com.theitroad.files;
import java.io.File;
import java.io.FilenameFilter;
public class FileNameFilterExample {
public static void main(String[] args) {
String dir = "/Users/hyman/temp";
String extension = ".doc";
findFiles(dir, extension);
}
private static void findFiles(String dir, String extension) {
File file = new File(dir);
if (!file.exists())
System.out.println(dir + " Directory doesn't exists");
File[] listFiles = file.listFiles(new MyFileNameFilter(extension));
//File[] listFiles = file.listFiles((d, s) -> {
//return s.toLowerCase().endsWith(extension);
//});
if (listFiles.length == 0) {
System.out.println(dir + "doesn't have any file with extension " + extension);
} else {
for (File f: listFiles)
System.out.println("File: " + dir + File.separator + f.getName());
}
}
//FileNameFilter implementation
public static class MyFileNameFilter implements FilenameFilter {
private String extension;
public MyFileNameFilter(String extension) {
this.extension = extension.toLowerCase();
}
@Override
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(extension);
}
}
}
MyFileNameFilter类实现FileNameFilter接口,accept方法检查文件名是否以特定扩展名结尾。
在main方法中,我们正在调用使用MyFileNameFilter仅列出xml文件的findFiles方法。
请注意,以检查文件扩展名时忽略大小写的方式编写了MyFileNameFilter。
具有Lambda表达式的Java中的FileNameFilter
由于FileNameFilter是一个功能接口,因此我们可以使用lambda表达式来减少上述代码。
我们完全不需要编写实现。
以下是将FileNameFilter与lambda表达式结合使用的代码。
File[] listFiles = file.listFiles((d, s) -> {
return s.toLowerCase().endsWith(extension);
});

