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!