Wie kann ich alle Dateien in einem Ordner mit Java lesen? Es spielt keine Rolle, welche API.
Antworten
Zu viele Anzeigen?public void listFilesForFolder(final File folder) {
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
listFilesForFolder(fileEntry);
} else {
System.out.println(fileEntry.getName());
}
}
}
final File folder = new File("/home/you/Desktop");
listFilesForFolder(folder);
Dateien.walk API ist ab Java 8 verfügbar.
try (Stream<Path> paths = Files.walk(Paths.get("/home/you/Desktop"))) {
paths
.filter(Files::isRegularFile)
.forEach(System.out::println);
}
Das Beispiel verwendet Versuch-mit-Ressourcen Muster, das im API-Leitfaden empfohlen wird. Damit wird sichergestellt, dass der Stream unabhängig von den Umständen geschlossen wird.
In Java 8 können Sie dies tun
Files.walk(Paths.get("/path/to/folder"))
.filter(Files::isRegularFile)
.forEach(System.out::println);
die alle Dateien in einem Ordner ausgibt, während alle Verzeichnisse ausgeschlossen werden. Wenn Sie eine Liste benötigen, genügt das folgende Beispiel:
Files.walk(Paths.get("/path/to/folder"))
.filter(Files::isRegularFile)
.collect(Collectors.toList())
Wenn Sie zurückkehren möchten List<File>
anstelle von List<Path>
einfach kartieren:
List<File> filesInFolder = Files.walk(Paths.get("/path/to/folder"))
.filter(Files::isRegularFile)
.map(Path::toFile)
.collect(Collectors.toList());
Sie müssen auch sicherstellen, dass Sie den Stream schließen! Andernfalls könnte eine Ausnahme auftreten, die Ihnen mitteilt, dass zu viele Dateien geöffnet sind. Lesen aquí für weitere Informationen.
Alle Antworten zu diesem Thema, die die neuen Java 8-Funktionen verwenden, vernachlässigen das Schließen des Streams. Das Beispiel in der akzeptierten Antwort sollte lauten:
try (Stream<Path> filePathStream=Files.walk(Paths.get("/home/you/Desktop"))) {
filePathStream.forEach(filePath -> {
if (Files.isRegularFile(filePath)) {
System.out.println(filePath);
}
});
}
Aus der Javadoc des Programms Files.walk
Methode:
Der zurückgegebene Stream kapselt einen oder mehrere DirectoryStreams. Wenn rechtzeitige Entsorgung von Dateisystemressourcen erforderlich ist, sollte das try-with-resources-Konstrukt verwendet werden, um sicherzustellen, dass die Stream-Methode aufgerufen wird, nachdem die Stream-Operationen abgeschlossen sind.
Eine Bemerkung dazu, um alle Dateien im Verzeichnis zu erhalten.
Die Methode Files.walk(path)
gibt alle Dateien zurück, indem es den Dateibaum mit der angegebenen Startdatei als Wurzel durchläuft.
Zum Beispiel gibt es den nächsten Dateibaum:
\---folder
| file1.txt
| file2.txt
|
\---subfolder
file3.txt
file4.txt
Die Verwendung des java.nio.file.Files.walk(Path)
:
Files.walk(Paths.get("folder"))
.filter(Files::isRegularFile)
.forEach(System.out::println);
Dies führt zu folgendem Ergebnis:
folder\file1.txt
folder\file2.txt
folder\subfolder\file3.txt
folder\subfolder\file4.txt
Um alle Dateien nur im aktuellen Verzeichnis zu erhalten, verwenden Sie die java.nio.file.Files.list(Path)
:
Files.list(Paths.get("folder"))
.filter(Files::isRegularFile)
.forEach(System.out::println);
Ergebnis:
folder\file1.txt
folder\file2.txt
- See previous answers
- Weitere Antworten anzeigen