我想收集一个目录下所有文件的列表,特别是包括子目录。我不喜欢自己做事,所以我使用FileUtils.listFiles
的是 Apache Commons IO。所以我有类似的东西:
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);
}
}
}
问题是,这似乎只能找到普通文件,而不是目录:
$ 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"
以任何顺序)。
我也会接受非FileUtils
解决方案,但必须编写我自己的 BFS,甚至从我得到的列表中收集父目录集似乎很愚蠢。(无论如何都会错过空的子目录。)这是在Linux上,FWIW。