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

Java 查找与给定名称匹配的子目录,java,file,apache-commons,Java,File,Apache Commons,我需要在根目录下找到具有给定名称(我称之为“fixedname”)的目录。 我有以下目录结构: - rootdir -- someName1 --- fixedName -- somename2 --- fixedName 根目录下有一些名称未知的目录,这些目录下有我的目标目录我的“查找”结果应该是:[rootDir/someName1/fixedName,rootDir/someName2/fixedName] 我尝试使用,特别是该方法,执行以下操作: final File ROOTDIR

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

- rootdir
-- someName1
--- fixedName
-- somename2
--- fixedName
根目录下有一些名称未知的目录,这些目录下有我的目标目录我的“查找”结果应该是:[rootDir/someName1/fixedName,rootDir/someName2/fixedName]

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

final File ROOTDIR = new File("/rootdir");
IOFileFilter nameFilter = new NameFileFilter("fixedName");
Collection<File> files = FileUtils.listFiles(ROOTDIR, TrueFileFilter.TRUE, nameFilter);
final File ROOTDIR=新文件(“/ROOTDIR”);
IOFileFilter nameFilter=新名称FileFilter(“fixedName”);
集合文件=FileUtils.listFiles(ROOTDIR,TrueFileFilter.TRUE,nameFilter);

但它不起作用,因为细分曲面漫游在someName*dirs级别停止我可以编写一个自定义方法,但我想知道是否可以使用Commons FileUtils或Java API实现我所需要的功能(我的意思是使用一些高级函数)

我只需要手动使用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);
                }
            }
        )));
    }
java.util.List result=new ArrayList();
最终字符串searchFor=“fixedName”;
对于(文件子项:f.listFiles()){
result.addAll(Arrays.asList(
child.listFiles(新文件名过滤器(){
公共布尔接受(文件父级,字符串子名称){
返回childName.equals(searchFor);
}
}
)));
}

我个人没有使用过此函数,但从查看的结果来看,我认为您对方法参数的解释不正确

listfiles接受根目录、文件筛选器和目录筛选器。目录筛选器用于确定要查找的子目录,而不是查找目录。您希望在所有子目录中查找“fixedName”。我认为您实际上希望像这样调用该方法:

final File ROOTDIR = new File("/rootdir");
IOFileFilter nameFilter = new NameFileFilter("fixedName");
Collection<File> files = 
      FileUtils.listFiles(ROOTDIR, nameFilter, TrueFileFilter.INSTANCE);
final File ROOTDIR=新文件(“/ROOTDIR”);
IOFileFilter nameFilter=新名称FileFilter(“fixedName”);
集合文件=
listFiles(ROOTDIR、nameFilter、TrueFileFilter.INSTANCE);

+1对于使用标准API,listfiles()已经在File类中,我不明白他为什么首先使用commons io这段代码有效,但它不是作为commons listfiles递归的(我的问题显示了我的树,但我想将它应用到更深层的树中),我只是好奇我是否正确理解了commons fileutils API,是否很容易将其转换为递归函数。事实上,我无论如何都会把它清理干净。出于这个目的,使用Commons listFiles似乎是不必要的,因为您可以在标准API中以更容易理解的方式编写它。这是我的第一次尝试,但它不起作用,因为该方法不会下降到第一级,因为它会在比较时停止-在nameFilter中-“someName1”与“fixedname”,因此,它不会浏览下面的文件someName1@cdarwin从更深入的角度来看,以我在回答中指定的方式调用函数实际上可以正确地遍历树(尝试搜索嵌套文件而不是目录)。问题是它只搜索文件,而不是目录。在内部,apache commons创建effFileFilter=AndFileFilter(yourFilter,NotFileFilter(DirectoryFileFilter))。我看不出使用这个函数有什么好处。