Java FilenameFilter interface can be implemented to filter file names when File
class listFiles()
method is used.
使用File
类listFiles()
方法时,可以实现Java FilenameFilter接口来过滤文件名。
Java FilenameFilter (Java FilenameFilter)
Java FileNameFilter interface has method boolean accept(File dir, String name)
that should be implemented and every file is tested for this method to be included in the file list.
Java FileNameFilter 接口具有应实现的boolean accept(File dir, String name)
方法boolean accept(File dir, String name)
,并且针对此方法测试每个文件,以将其包括在文件列表中。
From Java 8 onwards, FileNameFilter is a functional interface since it has a single method.

从Java 8开始,FileNameFilter是一个功能接口,因为它具有单个方法。
Java FilenameFilter示例 (Java FilenameFilter Example)
We can use FilenameFilter in java to find all the files of a specific extension in a directory. Below is the program showing how to use FileNameFilter in java.
我们可以在Java中使用FilenameFilter在目录中查找特定扩展名的所有文件。 以下是显示如何在Java中使用FileNameFilter的程序。
package com.journaldev.files;
import java.io.File;
import java.io.FilenameFilter;
public class FileNameFilterExample {
public static void main(String[] args) {
String dir = "/Users/pankaj/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
class implements FilenameFilter
interface and accept method checks if the file name ends with specific extension or not. In the main method, we are invoking findFiles
method that is using MyFileNameFilter to list xml files only. Note that MyFileNameFilter is written in a way to ignore case while checking for file extension.
MyFileNameFilter
类实现FilenameFilter
接口,accept方法检查文件名是否以特定扩展名结尾。 在main方法中,我们正在调用findFiles
方法,该方法使用MyFileNameFilter仅列出xml文件。 请注意,以检查文件扩展名时忽略大小写的方式编写了MyFileNameFilter。
具有lambda表达式的Java中的FileNameFilter (FileNameFilter in java with lambda expression)
Since FileNameFilter is a functional interface, we can reduce the above code by using a lambda expression. We won’t need to write the implementation at all.
由于FileNameFilter是一个功能接口 ,因此我们可以使用lambda表达式来减少上述代码。 我们根本不需要编写实现。
Below is the code to use the FileNameFilter with a lambda expression.
以下是将FileNameFilter与lambda表达式结合使用的代码。
File[] listFiles = file.listFiles((d, s) -> {
return s.toLowerCase().endsWith(extension);
});
That’s all for java FileNameFilter example. I hope it will help you in listing files in a directory using some criteria.
这就是java FileNameFilter示例的全部内容。 我希望它可以帮助您使用某些条件列出目录中的文件。
翻译自: https://www.journaldev.com/845/java-filenamefilter-example