使用一个小型Java工具来获取基于一组文件扩展名的文件集,我在使用listFiles()和遇到错误文件时使用continue;
之间进行辩论,而不是使用自定义FileFilter或FilenameFilter对我有效。
在我看来,这些方法是Swing文件浏览等集成工具的便捷方法,如果我们不挂钩任何这些工具,它们不比手动方法更有效。那是对的吗?这些过滤工具还有其他好处吗?
答案 0 :(得分:2)
从JDK 1.6源代码:
public String[] list(FilenameFilter filter) {
String names[] = list();
if ((names == null) || (filter == null)) {
return names;
}
ArrayList v = new ArrayList();
for (int i = 0 ; i < names.length ; i++) {
if (filter.accept(this, names[i])) {
v.add(names[i]);
}
}
return (String[])(v.toArray(new String[v.size()]));
}
所以,正如你所看到的,基本上,就像你在手动测试中所做的一样。它带给你的唯一东西就是不必重新发明轮子,如果他们突然发现更快的方式,你就不必改变你的代码:)
答案 1 :(得分:2)
与基于接口的任何其他API一样,这样可以很好地重用逻辑。您可以让java.io. * API为您查找任何类型的文件,特别是如果您使用Apache Commons IO等库:
http://commons.apache.org/io/api-1.4/org/apache/commons/io/filefilter/package-summary.html
答案 2 :(得分:1)
是的,它们主要用于接受文件过滤器的工具(或者通常在任何确定逻辑的代码与评估过滤器的代码不同的地方)。引擎盖下没有任何魔力,它们只是在你自己的循环中做你能做的事。
答案 3 :(得分:0)
不,你认为你在那里有钱是对的。它们是方便的方法。他们只需要一个名称(并且知道你最初设置的扩展名),然后检查它是否应该包含在not列表中。与你正在做的事情大致相同。
来自Java文档:
public boolean accept(File dir, String name)
测试文件列表中是否应包含指定文件。
无论如何,这正是你正在做的事情。