当使用File
类的listFiles()
方法时,可以实现FilenameFilter
接口来过滤文件名。
Java FilenameFilter接口
Java FileNameFilter
接口具有应该实现的方法boolean accept(File dir,String name)
,并且测试每个文件以使该方法包含在文件列表中。
从Java 8开始,FileNameFilter
是一个功能接口,因为它只有一个方法。
Java FilenameFilter示例
在java中使用FilenameFilter
来查找目录中特定扩展的所有文件。下面是演示如何在java中使用FileNameFilter
过滤文件名称的程序。
import java.io.File;
import java.io.FilenameFilter;
public class FileNameFilterExample {
public static void main(String[] args) {
String dir = "D:/maxsu/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接口的实现
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方法中调用findFiles()
方法,该方法使用MyFileNameFilter
仅列出xml
文件。请注意,MyFileNameFilter
在检查文件扩展名时忽略大小写。
带有lambda表达式FileNameFilter实现
由于FileNameFilter
是一个功能接口,可以使用lambda表达式来减少上面的代码。下面是使用带有lambda表达式的FileNameFilter
实现代码。
File[] listFiles = file.listFiles((d, s) -> {
return s.toLowerCase().endsWith(extension);
});
上面就是java FileNameFilter
过滤文件名称的全部内容,希望它能帮助您使用某些条件列出目录中的文件。