将 File.listFiles 与 FileNameExtensionFilter 结合使用
我想获取目录中具有特定扩展名的文件列表。在 API (Java 6) 中,我看到一个方法 File.listFiles(FileFilter)
可以执行此操作。
由于我需要特定的扩展名,因此我创建了一个 FileNameExtensionFilter
。但是,当我使用 listFiles
时,出现编译错误。我认为既然 FileNameExtensionFilter 实现了 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)
。为什么编译器不识别这个?
如果我编写自己的扩展过滤器来扩展 FileFilter
,则此方法有效。我宁愿使用 FileNameExtensionFilter 而不是自己编写。我做错了什么?
I would like to get a list of files with a specific extension in a directory. In the API (Java 6), I see a method File.listFiles(FileFilter)
which would do this.
Since I need a specific extension, I created a FileNameExtensionFilter
. However I get a compilation error when I use listFiles
with this. I assumed that since FileNameExtensionFilter implements FileFilter
, I should be able to do this. Code follows:
FileNameExtensionFilter filter = new FileNameExtensionFilter("text only","txt");
String dir = "/users/blah/dirname";
File f[] = (new File(dir)).listFiles(filter);
The last line shows a compilation error:
method listFiles(FileNameFilter) in type File is not applicable for arguments of type FileNameExtensionFilter
I am trying to use listFiles(FileFilter)
, not listFiles(FileNameFilter)
. Why does the compiler not recognize this?
This works if I write my own extension filter extending FileFilter
. I would rather use FileNameExtensionFilter
than write my own. What am I doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
FileNameExtensionFilter
类旨在供 Swing 在JFileChooser
。尝试使用
FilenameFilter
相反。例如:The
FileNameExtensionFilter
class is intended for Swing to be used in aJFileChooser
.Try using a
FilenameFilter
instead. For example:java 8 语法中的一行:
One-liner in java 8 syntax:
您想要使用
FileNameExtensionFilter
有什么具体原因吗?我知道这有效..Is there a specific reason you want to use
FileNameExtensionFilter
? I know this works..使用 java lambdas(自 java 8 起可用),您只需一行即可将 javax.swing.filechooser.FileFilter 转换为 java.io.FileFilter 。
With java lambdas (available since java 8) you can simply convert
javax.swing.filechooser.FileFilter
tojava.io.FileFilter
in one line.这是我刚刚快速制作的东西,它的性能应该比 File.getName().endsWith(".xxxx"); 好得多。
这是各种图像格式的示例。
Here's something I quickly just made and it should perform far better than File.getName().endsWith(".xxxx");
Here's an example for various images formats.
呃...listFiles 需要java.io.FileFilter。 FileNameExtensionFilter 扩展了 javax.swing.filechooser.FileFilter。我通过实现 java.io.FileFilter 的实例解决了我的问题
编辑:我确实使用了类似于 @cFreiner 的答案。我试图使用 Java API 方法而不是编写自己的实现,这就是我尝试使用 FileNameExtensionFilter 的原因。我的应用程序中有许多 FileChoosers,并为此使用了 FileNameExtensionFilters,并且我错误地认为它也在扩展 java.io.FileFilter。
Duh.... listFiles requires java.io.FileFilter. FileNameExtensionFilter extends javax.swing.filechooser.FileFilter. I solved my problem by implementing an instance of java.io.FileFilter
Edit: I did use something similar to @cFreiner's answer. I was trying to use a Java API method instead of writing my own implementation which is why I was trying to use FileNameExtensionFilter. I have many FileChoosers in my application and have used FileNameExtensionFilters for that and I mistakenly assumed that it was also extending java.io.FileFilter.
还有 DirectoryStream
或者如果想做更复杂的事情
Theres also DirectoryStream
Or if want to do something more complex