Java FileFilter/FilenameFilter的好处是什么
在一个小型Java工具上工作,根据一组文件扩展名获取一组文件,我在使用listFiles()和使用Java FileFilter/FilenameFilter的好处是什么,java,file-io,Java,File Io,在一个小型Java工具上工作,根据一组文件扩展名获取一组文件,我在使用listFiles()和使用continue当我遇到一个坏文件时,与使用自定义FileFilter或FilenameFilter有效地为我做同样的事情相比 在我看来,这些方法对于像Swing文件浏览这样的集成工具来说是很方便的方法,如果我们不使用这些工具中的任何一种,它们也不会比手动方法更有效。对吗?这些过滤工具还有其他好处吗?没有,我想你在钱上已经做到了。它们是方便的方法。他们只需要取一个名字(并且知道您最初设置的扩展名),
continue代码>当我遇到一个坏文件时,与使用自定义FileFilter或FilenameFilter有效地为我做同样的事情相比
在我看来,这些方法对于像Swing文件浏览这样的集成工具来说是很方便的方法,如果我们不使用这些工具中的任何一种,它们也不会比手动方法更有效。对吗?这些过滤工具还有其他好处吗?没有,我想你在钱上已经做到了。它们是方便的方法。他们只需要取一个名字(并且知道您最初设置的扩展名),然后检查它是否应该包含在列表中。和你现在做的差不多
从Java文档中:
测试指定的文件是否应包含在文件列表中
这正是您要做的。来自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()]));
}
public String[]列表(FilenameFilter过滤器){
字符串名称[]=list();
if((name==null)| |(filter==null)){
返回姓名;
}
ArrayList v=新的ArrayList();
for(int i=0;i
因此,正如您所看到的,基本上,这里所做的事情与手动测试相同。它给您带来的唯一好处是不必重新发明轮子,如果他们突然发现一种更快的方法,您就不必更改代码:)与任何其他基于接口的API一样,这允许大量重用逻辑。您可以让java.io.*API为您查找任何类型的文件,特别是如果您使用诸如Apache Commons io之类的库:
是的,它们主要用于接受文件筛选器的工具(或者通常用于确定逻辑的代码与评估筛选器的代码不同的任何地方)。幕后没有魔法,他们只是做你在自己的循环中可以做的事情。它带给你的主要功能是参数化代码,列出具有不同过滤条件(在所述代码之外定义)的文件。谢谢,你是对的。起初,我认为自己做会更简单,但我很快意识到实现FilenameFilter不仅更高效(编码),而且更干净,甚至让我的代码更健壮。我同意。Java库的这一部分被过度设计,并被无用的接口和方法所污染。@mklhmnn:我想说FilenameFilter是多余的,因为已经有了FileFilter,但拥有FileFilter是个好主意。
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()]));
}