2010-12-15 58 views
3

使用一个小型的Java工具来获取一组基于一组文件扩展名的文件,我在讨论使用listFiles()和使用continue;当我遇到一个坏文件时,与使用自定义FileFilter或FilenameFilter对我执行相同的操作。FileFilter/FilenameFilter的好处

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

回答

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()])); 
} 

所以,你可以看到,基本上,同样的事情在这里,你会用手工测试做完成。它带给你的唯一的东西就是不必重新发明轮子,如果他们突然发现了更快的方式来做到这一点,你将不必更改代码:)

+0

它带给你的主要功能是能够参数化列出具有不同过滤条件(在所述代码之外定义的)的文件的代码。 – Thilo 2010-12-15 11:37:22

+0

谢谢,你说得对。起初,我认为自己做起来会更简单,但我很快意识到实现FilenameFilter更有效(代码)并且更加简洁,甚至实际上让我的代码更加健壮。 – dimo414 2010-12-15 12:58:28

0

不,你认为你在那里的钱是正确的。他们是便利的方法。他们只是取一个名字,(并且知道你最初设置的扩展名),并且检查它是否应该包含在非列表中。无论如何你都在做什么。

从Java文档:

public boolean accept(File dir, String name) 

测试指定的文件应该包含在文件列表中。

这正是你在做什么。

1

是的,他们大多是用于那些接受文件筛选器工具(或者一般情况下,确定逻辑的代码与评估过滤器的代码不同)。在引擎盖下没有魔法,他们只是做你自己的循环所能做的。

+0

我同意。 Java库的这一部分已被过度设计并被无用的接口和方法所污染。 – Mot 2010-12-15 12:07:27

+0

@mklhmnn:我说FilenameFilter是多余的,因为已经有一个FileFilter,但FileFilter是一个好主意。 – Thilo 2010-12-16 01:19:02