我想收集一个目录下的所有文件列表,特别是包括子目录。我不想亲自操作,所以我正在使用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"
(以任意顺序)。
我也可以接受非FileUtils
的解决方案,但是写自己的BFS甚至从我得到的列表中收集父目录的集合似乎很傻。 (那样会错过空的子目录。)FWIW,这是在Linux上进行的。