Ich möchte eine Liste von alle Dateien in einem Verzeichnis sammeln, insbesondere einschließlich Unterverzeichnissen. Ich mag es nicht, Dinge selbst zu machen, also verwende ich FileUtils.listFiles
von Apache Commons IO. So habe ich so etwas wie:Nur Verzeichnisse rekursiv finden mit 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);
}
}
}
Problem ist, scheint dies nur normale Dateien, keine Verzeichnisse zu finden:
$ mkdir -p foo/bar/baz; touch foo/one_file
$ java -classpath commons-io-1.4.jar:. TestListFiles
Found file: foo/one_file
ich bereits TrueFileFilter
sowohl der Filter durchströmt, so kann ich‘ Ich denke an etwas umfassenderes. Ich möchte es auflisten: "foo", "foo/one_file", "foo/bar", "foo/bar/baz"
(in beliebiger Reihenfolge).
Ich würde auch nicht FileUtils
Lösungen akzeptieren, aber es scheint albern zu sein, um mein eigenes BFS zu schreiben, oder sogar die Menge der übergeordneten Verzeichnisse aus der Liste zu sammeln, die ich bekomme. (Das würde sowieso leere Unterverzeichnisse vermissen.) Dies ist unter Linux, FWIW.
Dank für den Zeiger - ich kann am Ende nur das kopieren und es funktioniert. Ich nehme an, das ist, was ich bekomme, wenn man annimmt, dass alles, was eine Datei unter Linux ist (Verzeichnisse, Links, Pipes, Geräte), eine Datei nach Commons Definition ist. –
Ich hätte die gleiche Annahme gemacht, dass du es getan hast - bis es nicht funktioniert hat. Sie sollten ihr JavaDoc wirklich deutlicher machen, um es klar zu machen. – Eddie
Wow, danke für den Zeiger. Es gibt keinen Hinweis in der Javadoc, dass Verzeichnisse ausgeschlossen sind. Ich weiß nicht wer auf der Erde davon ausgeht, dass Verzeichnisse keine Dateien sind! – WhyNotHugo