将File.listFiles与FileNameExtensionFilter一起使用

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


由于我需要特定的扩展名,因此我创建了一个FileNameExtensionFilter。但是,当我listFiles与此一起使用时,出现编译错误。我认为自以来FileNameExtensionFilter implements FileFilter,我应该能够做到这一点。代码如下:


FileNameExtensionFilter filter = new FileNameExtensionFilter("text only","txt");

String dir  = "/users/blah/dirname";

File f[] = (new File(dir)).listFiles(filter);

最后一行显示编译错误:


File类型的方法listFiles(FileNameFilter)不适用于FileNameExtensionFilter类型的参数


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


如果我编写自己的扩展过滤器extend,则此方法有效FileFilter。我宁愿用而不愿FileNameExtensionFilter自己写。我究竟做错了什么?


catspeake
浏览 260回答 3
3回答

扬帆大鱼

在FileNameExtensionFilter类用于摇摆的使用JFileChooser。尝试使用FilenameFilter代替。例如: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");    }});

慕虎7371278

您要使用某个特定原因FileNameExtensionFilter吗?我知道这有用。private File[] getNewTextFiles() {    return dir.listFiles(new FilenameFilter() {        @Override        public boolean accept(File dir, String name) {            return name.toLowerCase().endsWith(".txt");        }    });}

收到一只叮咚

这是我很快制作的,它的性能应该比File.getName()。endsWith(“。xxxx”);好得多。import java.io.File;import java.io.FileFilter;public class ExtensionsFilter implements FileFilter&nbsp;{&nbsp; &nbsp; private char[][] extensions;&nbsp; &nbsp; private ExtensionsFilter(String[] extensions)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; int length = extensions.length;&nbsp; &nbsp; &nbsp; &nbsp; this.extensions = new char[length][];&nbsp; &nbsp; &nbsp; &nbsp; for (String s : extensions)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.extensions[--length] = s.toCharArray();&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; @Override&nbsp; &nbsp; public boolean accept(File file)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; char[] path = file.getPath().toCharArray();&nbsp; &nbsp; &nbsp; &nbsp; for (char[] extension : extensions)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (extension.length > path.length)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; continue;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int pStart = path.length - 1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int eStart = extension.length - 1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boolean success = true;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i <= eStart; i++)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((path[pStart - i] | 0x20) != (extension[eStart - i] | 0x20))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; success = false;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (success)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; }}这是各种图像格式的示例。private static final ExtensionsFilter IMAGE_FILTER =&nbsp;&nbsp; &nbsp; &nbsp; new ExtensionsFilter(new String[] {".png", ".jpg", ".bmp"});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java