FileFilter / FilenameFilter的好处是什么?

时间:2010-12-15 11:26:01

标签: java file-io

使用一个小型Java工具来获取基于一组文件扩展名的文件集,我在使用listFiles()和遇到错误文件时使用continue;之间进行辩论,而不是使用自定义FileFilter或FilenameFilter对我有效。

在我看来,这些方法是Swing文件浏览等集成工具的便捷方法,如果我们不挂钩任何这些工具,它们不比手动方法更有效。那是对的吗?这些过滤工具还有其他好处吗?

4 个答案:

答案 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)
     

测试文件列表中是否应包含指定文件。

无论如何,这正是你正在做的事情。