我需要在根目录下找到具有给定名称的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 实现我需要的东西(使用一些高级函数,我的意思)
答案 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);