Я хочу собрать список всех файлов в каталоге, в частности, включая подкаталоги. Мне нравится не делать ничего, поэтому я использую 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"
(в любом порядке).
Я принимал бы и решения non FileUtils
, но мне кажется глупо писать мою собственную BFS или даже собирать набор родительских каталогов из списка, который я получаю. (Это все равно пропустит пустые подкаталоги.) Это на Linux, FWIW.