Heim >Java >javaLernprogramm >Wie kann man ein Dateiverzeichnis und seine Unterverzeichnisse in Java effizient durchsuchen?

Wie kann man ein Dateiverzeichnis und seine Unterverzeichnisse in Java effizient durchsuchen?

Susan Sarandon
Susan SarandonOriginal
2024-12-20 04:23:09749Durchsuche

How to Efficiently Traverse a File Directory and Its Subdirectories in Java?

Iterieren durch die Unterverzeichnisse eines Dateiverzeichnisses in Java

Bei der Arbeit mit Dateien in Java ist es oft notwendig, nicht nur auf die Dateien in einem zuzugreifen Verzeichnis, sondern auch die in seinen Unterverzeichnissen. Dies wirft die Frage auf: Wie können wir in Java effizient durch ein Verzeichnis und seine Unterverzeichnisse navigieren?

Rekursion: Ein Standardansatz

Eine Standardtechnik für die Verzeichnisiteration umfasst die Verwendung Rekursion. Indem Sie mithilfe der File#isDirectory()-Methode testen, ob eine bestimmte Datei ein Verzeichnis ist, rufen Sie rekursiv dieselbe Methode mit ihren File#listFiles()-Ergebnissen auf.

Der folgende Codeausschnitt veranschaulicht diesen rekursiven Ansatz:

import java.io.File;

public class Demo {

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

    public static void showFiles(File[] files) {
        for (File file : files) {
            if (file.isDirectory()) {
                System.out.println("Directory: " + file.getAbsolutePath());
                showFiles(file.listFiles()); // Calls same method again.
            } else {
                System.out.println("File: " + file.getAbsolutePath());
            }
        }
    }
}

Java 8 Alternative: Schwanzrekursion mit Files#walk()

Für Java 8 und spätere Versionen bietet die Methode Files#walk() eine Alternative zur Rekursion. Es verwendet eine Schwanzrekursion und vermeidet so das Risiko eines StackOverflowError in Situationen mit tiefen Verzeichnisbäumen.

So verwenden Sie Files#walk() für die Verzeichnisiteration:

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

public class DemoWithJava8 {

    public static void main(String... args) throws Exception {
        Path dir = Paths.get("/path/to/dir");
        Files.walk(dir).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());
        }
    }
}

Fazit

Durch die Nutzung der Rekursion mit File#isDirectory() und File#listFiles() oder durch den Einsatz von Files#walk() in Java 8 können Sie sowohl Verzeichnisdateien als auch Unterverzeichnisdateien in einer Java-Anwendung effektiv durchlaufen.

Das obige ist der detaillierte Inhalt vonWie kann man ein Dateiverzeichnis und seine Unterverzeichnisse in Java effizient durchsuchen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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