Я хочу собрать список всех файлов в каталоге, в частности, включая подкаталоги. Мне нравится ничего не делать самому, поэтому я использую 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.