递归仅查找具有 FileUtils.listFiles 的目录
2022-09-02 19:52:48
我想收集一个目录下所有文件的列表,特别是包括子目录。我喜欢不自己做事,所以我使用Apache Commons IO。所以我有这样的东西:FileUtils.listFiles
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"
我也会接受非解决方案,但是必须编写自己的BFS,甚至从我得到的列表中收集父目录集似乎很愚蠢。(无论如何,这都会错过空的子目录。这是在Linux,FWIW上。FileUtils