使用一个小型的Java工具来获取一组基于一组文件扩展名的文件,我在讨论使用listFiles()和使用continue;
当我遇到一个坏文件时,与使用自定义FileFilter或FilenameFilter对我执行相同的操作。FileFilter/FilenameFilter的好处
在我看来,这些方法是集成工具(如Swing文件浏览)的便捷方法,并且如果我们不挂钩任何这些工具,则不会比手动方法更有效。那是对的吗?这些过滤工具是否还有其他好处?
使用一个小型的Java工具来获取一组基于一组文件扩展名的文件,我在讨论使用listFiles()和使用continue;
当我遇到一个坏文件时,与使用自定义FileFilter或FilenameFilter对我执行相同的操作。FileFilter/FilenameFilter的好处
在我看来,这些方法是集成工具(如Swing文件浏览)的便捷方法,并且如果我们不挂钩任何这些工具,则不会比手动方法更有效。那是对的吗?这些过滤工具是否还有其他好处?
从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()]));
}
所以,你可以看到,基本上,同样的事情在这里,你会用手工测试做完成。它带给你的唯一的东西就是不必重新发明轮子,如果他们突然发现了更快的方式来做到这一点,你将不必更改代码:)
不,你认为你在那里的钱是正确的。他们是便利的方法。他们只是取一个名字,(并且知道你最初设置的扩展名),并且检查它是否应该包含在非列表中。无论如何你都在做什么。
从Java文档:
public boolean accept(File dir, String name)
测试指定的文件应该包含在文件列表中。
这正是你在做什么。
像任何其他基于接口的API一样,这允许逻辑的重用。你可以有java.io. * API找到任何类型为你的文件,特别是如果你使用库,比如Apache下议院IO:
http://commons.apache.org/io/api-1.4/org/apache/commons/io/filefilter/package-summary.html
它带给你的主要功能是能够参数化列出具有不同过滤条件(在所述代码之外定义的)的文件的代码。 – Thilo 2010-12-15 11:37:22
谢谢,你说得对。起初,我认为自己做起来会更简单,但我很快意识到实现FilenameFilter更有效(代码)并且更加简洁,甚至实际上让我的代码更加健壮。 – dimo414 2010-12-15 12:58:28