查找与给定名称匹配的子目录

时间:2011-02-28 16:28:42

标签: java file apache-commons

我需要在根目录下找到具有给定名称的dirs(我称之为“fixedname”)。 我有以下目录结构:

- rootdir
-- someName1
--- fixedName
-- somename2
--- fixedName

在根目录下有一些名字是未知的目标,在这些目标下有我的目标目录。 我的“查找”结果应为:[rootDir / someName1 / fixedName,rootDir / someName2 / fixedName]

我尝试使用Commons FileUtils,特别是方法listfiles,执行以下操作:

final File ROOTDIR = new File("/rootdir");
IOFileFilter nameFilter = new NameFileFilter("fixedName");
Collection<File> files = FileUtils.listFiles(ROOTDIR, TrueFileFilter.TRUE, nameFilter);

但它不起作用,因为subdir walk停止在someName * dirs的级别。 我可以编写一个自定义方法,但我想知道是否可以使用Commons FileUtils或Java API 实现我需要的东西(使用一些高级函数,我的意思)

2 个答案:

答案 0 :(得分:2)

我刚刚使用File类手动完成它,例如:

    java.util.List<File> result = new ArrayList<File>();
    final String searchFor = "fixedName";

    for (File child : f.listFiles()) {
        result.addAll(Arrays.asList(
            child.listFiles(new FilenameFilter() {
                public boolean accept(File parent, String childName) {
                    return childName.equals(searchFor);
                }
            }
        )));
    }

答案 1 :(得分:0)

我没有亲自使用过这个函数,但是从查看API开始,我认为你错误地解释了方法参数。

listfiles采用根目录,文件过滤器和目录过滤器。目录过滤器用于确定要查找的子目录,而不是用于查找目录。您想在所有子目录中查找“fixedName”。我想你实际上想要调用这样的方法:

final File ROOTDIR = new File("/rootdir");
IOFileFilter nameFilter = new NameFileFilter("fixedName");
Collection<File> files = 
      FileUtils.listFiles(ROOTDIR, nameFilter, TrueFileFilter.INSTANCE);