Wie liste ich in Java nur Unterverzeichnisse aus einem Verzeichnis auf?
Ich möchte die Funktion java.io.File verwenden. Was ist die beste Methode in Java, um dies zu tun?
Mit der File- Klasse können Sie die Verzeichnisse auflisten.
File file = new File("/path/to/directory");
String[] directories = file.list(new FilenameFilter() {
@Override
public boolean accept(File current, String name) {
return new File(current, name).isDirectory();
}
});
System.out.println(Arrays.toString(directories));
Aktualisieren
Kommentar des Autors zu diesem Beitrag wollte einen schnelleren Weg, tolle Diskussion hier: Wie kann man eine Liste von Verzeichnissen SCHNELL in Java abrufen?
Grundsätzlich:
Eine sehr einfache Java 8-Lösung:
Dies entspricht der Verwendung eines FileFilter (funktioniert auch mit älterem Java):
quelle
::
in diesem Fall?@Mohamed Mansour du warst fast da ... das "dir" Argument, das du benutzt hast, ist eigentlich der aktuelle Pfad, also wird es immer true zurückgeben. Um festzustellen, ob das Kind ein Unterverzeichnis ist oder nicht, müssen Sie dieses Kind testen.
quelle
Wenn Sie an einer Lösung mit Java 7 und NIO.2 interessiert sind, könnte dies folgendermaßen aussehen:
quelle
quelle
Für diejenigen, die sich auch für Java 7 und NIO interessieren, gibt es eine alternative Lösung zu der obigen Antwort von @ voo . Wir können einen Try-with-Resources- Aufruf verwenden
Files.find()
und eine Lambda-Funktion, mit der die Verzeichnisse gefiltert werden.Wir können Verzeichnisse sogar nach Namen filtern, indem wir die Lambda-Funktion ändern:
oder nach Datum:
quelle
Im Jahr 2012 (Datum der Frage) ja, nicht heute.
java.nio
API muss für solche Anforderungen bevorzugt werden.Schrecklich mit so vielen Antworten, aber nicht so einfach, wie ich das verwenden würde
Files.walk().filter().collect()
.Global sind zwei Ansätze möglich:
1)
Files.walk(Path start, )
hat keinemaxDepth
Einschränkungen während2)
Files.walk(Path start, int maxDepth, FileVisitOption... options)
erlaubt es einzustellen.Ohne Angabe einer Tiefenbeschränkung würde dies Folgendes ergeben:
Und wenn Sie aus alten Gründen eine Liste benötigen,
File
können Siemap(Path::toFile)
vor dem Sammeln einfach eine Operation hinzufügen :quelle
Files.list(Path)
was wohl das gleiche ist wieFiles.walk(Path,1)
.Files.list(Path)
ist eine faire Alternative, wenn wir keine rekursiven Ordner iterieren möchten. Ordner rekursiv zu iterieren,walk()
passt besser.Die Lösung, die für mich funktioniert hat, fehlt in der Liste der Antworten. Daher poste ich diese Lösung hier:
Hier habe ich
org.apache.commons.io.filefilter.FileFilterUtils
von Apache commons-io-2.2.jar verwendet. Die Dokumentation finden Sie hier: https://commons.apache.org/proper/commons-io/javadocs/api-2.2/org/apache/commons/io/filefilter/FileFilterUtils.htmlquelle
Gegeben ein Startverzeichnis als
String
String
Pfad als Parameter verwendet. In der Methode:listFiles
Methode ein Array von Dateien im aktuellen Verzeichnis abquelle
Hier ist eine Lösung für meinen Code. Ich habe gerade eine kleine Änderung von der ersten Antwort gemacht . Dadurch werden alle Ordner zeilenweise nur im gewünschten Verzeichnis aufgelistet:
quelle