Heim > Java > javaLernprogramm > Wie kann ich einen Verzeichnisbaum in Java durchlaufen?

Wie kann ich einen Verzeichnisbaum in Java durchlaufen?

Barbara Streisand
Freigeben: 2024-12-02 02:17:10
Original
669 Leute haben es durchsucht

How Can I Iterate Through a Directory Tree in Java?

Durchlaufen eines Verzeichnisbaums in Java

Eine der häufigsten Aufgaben bei der Arbeit mit Verzeichnissen besteht darin, alle darin enthaltenen Dateien und Verzeichnisse zu durchlaufen ein angegebenes Verzeichnis. Dies schließt Unterverzeichnisse ein und bietet umfassenden Zugriff auf den gesamten Verzeichnisbaum. In Java gibt es Standardansätze, um diese Funktionalität zu erreichen.

File#isDirectory():

Die File-Klasse in Java verfügt über eine Methode namens isDirectory(), die dies kann kann verwendet werden, um festzustellen, ob eine Datei ein Verzeichnis oder eine Datei darstellt. Wenn es sich bei der angegebenen Datei um ein Verzeichnis handelt, enthält sie eine Liste von Dateien und Verzeichnissen, die mit der Methode listFiles() abgerufen werden kann.

Rekursiver Ansatz mit Files#listFiles():

Ein einfacher Ansatz zum Durchlaufen eines Verzeichnisbaums ist die Verwendung der Rekursion. Das folgende Snippet demonstriert diese Methode:

import java.io.File;

public class DirectoryIterator {

    public static void main(String[] args) {
        File directory = new File("/path/to/dir");
        showFiles(directory.listFiles());
    }

    public static void showFiles(File[] files) {
        for (File file : files) {
            if (file.isDirectory()) {
                System.out.println("Directory: " + file.getAbsolutePath());
                showFiles(file.listFiles()); // Recursive call
            } else {
                System.out.println("File: " + file.getAbsolutePath());
            }
        }
    }
}
Nach dem Login kopieren

Dieser Ansatz funktioniert durch rekursiven Aufruf von showFiles() für die Liste der von listFiles() zurückgegebenen Dateien. Es ist jedoch wichtig, die StackOverflowError-Ausnahme zu behandeln, die auftreten kann, wenn der Verzeichnisbaum zu tief ist, als dass der JVM-Stack ihn verarbeiten könnte.

Files#walk() für Tail Recursion:

Für Java 8 und höher ist die Verwendung von Files#walk() ein effizienterer Ansatz. Diese Methode implementiert eine Schwanzrekursion, die das StackOverflowError-Problem vermeidet, indem der Status der Iteration im Methodenaufrufstapel und nicht im JVM-Stack beibehalten wird.

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class DirectoryIteratorWithJava8 {

    public static void main(String[] args) throws Exception {
        Path directory = Paths.get("/path/to/dir");
        Files.walk(directory).forEach(path -> showFile(path.toFile()));
    }

    public static void showFile(File file) {
        if (file.isDirectory()) {
            System.out.println("Directory: " + file.getAbsolutePath());
        } else {
            System.out.println("File: " + file.getAbsolutePath());
        }
    }
}
Nach dem Login kopieren

Files#walk() generiert einen Stream von Path-Objekten, die darstellen die Dateien und Verzeichnisse im angegebenen Verzeichnisbaum. Anschließend wird die Methode forEach() verwendet, um jedes Path-Objekt zu verarbeiten und die entsprechende Datei oder das entsprechende Verzeichnis anzuzeigen.

Das obige ist der detaillierte Inhalt vonWie kann ich einen Verzeichnisbaum in Java durchlaufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage