将 File.listFiles 与 FileNameExtensionFilter 一起使用

2022-08-31 11:25:57

我想在目录中获取具有特定扩展名的文件列表。在API(Java 6)中,我看到一个可以做到这一点的方法。File.listFiles(FileFilter)

由于我需要一个特定的扩展名,因此我创建了一个.但是,当我使用它时,我收到编译错误。我以为既然,我应该能够做到这一点。代码如下:FileNameExtensionFilterlistFilesFileNameExtensionFilter implements FileFilter

FileNameExtensionFilter filter = new FileNameExtensionFilter("text only","txt");
String dir  = "/users/blah/dirname";
File f[] = (new File(dir)).listFiles(filter);

最后一行显示编译错误:

方法列表文件类型中的文件(文件名过滤器)不适用于文件类型扩展过滤器类型的参数

我正在尝试使用 ,而不是 。为什么编译器不识别这一点?listFiles(FileFilter)listFiles(FileNameFilter)

如果我编写自己的扩展过滤器扩展,这将起作用。我宁愿使用而不是写我自己的。我做错了什么?FileFilterFileNameExtensionFilter


答案 1

FileNameExtensionFilter 类旨在让 SwingJFileChooser 中使用。

请尝试改用文件名筛选器。例如:

File dir = new File("/users/blah/dirname");
File[] files = dir.listFiles(new FilenameFilter() {
    public boolean accept(File dir, String name) {
        return name.toLowerCase().endsWith(".txt");
    }
});

答案 2

Java 8 语法中的单行代码:

pdfTestDir.listFiles((dir, name) -> name.toLowerCase().endsWith(".txt"));