791 Stimmen

Wie kann man alle Dateien in einem Ordner mit Java lesen?

Wie kann ich alle Dateien in einem Ordner mit Java lesen? Es spielt keine Rolle, welche API.

1142voto

rich Punkte 18046
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.

219voto

David Robles Punkte 9179
File folder = new File("/Users/you/folder/");
File[] listOfFiles = folder.listFiles();

for (File file : listOfFiles) {
    if (file.isFile()) {
        System.out.println(file.getName());
    }
}

172voto

Julian Pieles Punkte 3720

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.

36voto

Martin Punkte 1677

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.

35voto

xxxception Punkte 747

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X