Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FileFilter/FilenameFilter的好处是什么_Java_File Io - Fatal编程技术网

Java FileFilter/FilenameFilter的好处是什么

Java FileFilter/FilenameFilter的好处是什么,java,file-io,Java,File Io,在一个小型Java工具上工作,根据一组文件扩展名获取一组文件,我在使用listFiles()和使用continue当我遇到一个坏文件时,与使用自定义FileFilter或FilenameFilter有效地为我做同样的事情相比 在我看来,这些方法对于像Swing文件浏览这样的集成工具来说是很方便的方法,如果我们不使用这些工具中的任何一种,它们也不会比手动方法更有效。对吗?这些过滤工具还有其他好处吗?没有,我想你在钱上已经做到了。它们是方便的方法。他们只需要取一个名字(并且知道您最初设置的扩展名),

在一个小型Java工具上工作,根据一组文件扩展名获取一组文件,我在使用listFiles()和使用
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()]));
}