使用FileUtils.listFiles递归查找目录 [英] Recursively finding only directories with FileUtils.listFiles
问题描述
我想收集目录下的所有文件列表,特别是包括子目录。我不喜欢自己做事,所以我在Apache Commons IO中使用 FileUtils.listFiles
。所以我有类似的东西:
I want to collect a list of all files under a directory, in particular including subdirectories. I like not doing things myself, so I'm using FileUtils.listFiles
from Apache Commons IO. So I have something like:
import java.io.File;
import java.util.Collection;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
public class TestListFiles {
public static void main(String[] args) {
Collection<File> found = FileUtils.listFiles(new File("foo"),
TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
for (File f : found) {
System.out.println("Found file: " + f);
}
}
}
问题是,这只出现找到普通文件,而不是目录:
Problem is, this only appears to find normal files, not directories:
$ mkdir -p foo/bar/baz; touch foo/one_file
$ java -classpath commons-io-1.4.jar:. TestListFiles
Found file: foo/one_file
我已经传递 TrueFileFilter
到两个过滤器,所以我想不出更具包容性的东西。我希望它列出:foo,foo / one_file,foo / bar,foo / bar / baz
(按任意顺序)。
I'm already passing TrueFileFilter
to both of the filters, so I can't think of anything more inclusive. I want it to list: "foo", "foo/one_file", "foo/bar", "foo/bar/baz"
(in any order).
我也会接受非 FileUtils
解决方案,但是编写我自己的BFS,甚至是愚蠢的从我得到的列表中收集父目录集。 (无论如何,这都会错过空的子目录。)这是在Linux上,FWIW。
I would accept non-FileUtils
solutions as well, but it seems silly to have to write my own BFS, or even to collect the set of parent directories from the list I do get. (That would miss empty subdirectories anyway.) This is on Linux, FWIW.
推荐答案
一个旧答案,但这对我有用:
An old answer but this works for me:
FileUtils.listFilesAndDirs(new File(dir), TrueFileFilter.INSTANCE, DirectoryFileFilter.DIRECTORY);
同时显示:
我使用:
FileUtils.listFilesAndDirs(new File(dir), new NotFileFilter(TrueFileFilter.INSTANCE), DirectoryFileFilter.DIRECTORY)
仅显示目录而非文件......
Only shows directories and not files...
这篇关于使用FileUtils.listFiles递归查找目录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!