durch einen Verzeichnisbaum in java
Eine der gängigen Aufgaben bei der Arbeit mit Verzeichnis ein angegebenes Verzeichnis. Dies schließt Unterverzeichnisse ein und bietet einen umfassenden Zugang zum gesamten Verzeichnisbaum. In Java gibt es Standardansätze, um diese Funktionalität zu erreichen.
Datei#isdirectory ():
Die Dateiklasse in Java hat eine Methode namens isdirectory (), die kann, die kann können werden verwendet, um festzustellen, ob eine Datei ein Verzeichnis oder eine Datei darstellt. Wenn die angegebene Datei ein Verzeichnis ist, enthält sie eine Liste von Dateien und Verzeichnissen, die mit der Methode ListFiles () erhalten werden können.
Ein unkomplizierter Ansatz zur Iterierung eines Verzeichnisbaums besteht darin, eine Rekursion zu verwenden. Das folgende Ausschnitt zeigt diese Methode: import java.io.file; Public Class DirectoryIterator { public static void main (String [] args) { Dateiverzeichnis = neue Datei ("/path/to/dir"); Showfiles (Directory.Listfiles ()); } public static void showdatfile (Datei [] Dateien) { für (Dateidatei: Dateien) { if (file.isdirectory ()) { System.out.println ("Verzeichnis:" file.getabsolutepath ()); showFiles (file.listfiles ()); // rekursiver Anruf } anders { System.out.println ("Datei:" file.getabsolutepath ()); } } } }
Dieser Ansatz funktioniert durch rekursives Aufrufen von ShowFiles () in der Liste der von listFiles () zurückgegebenen Dateien. Es ist jedoch wichtig, die Ausnahme von Stackoverflowerror zu behandeln, was auftreten kann, wenn der Verzeichnisbaum zu tief ist, als dass der Stack des JVM zu handhaben ist. ]
Für Java 8 und später ist ein effizientere Ansatz die Verwendung von Dateien#Walk (). Diese Methode implementiert die Schwanzrekursion, die das Problem der Stackoverflowerror vermeidet, indem der Status der Iteration in der Methode Call Stack anstelle des JVM -Stacks aufrechterhalten wird. Import Java.nio.file.Path; Import Java.nio.file.Paths; Public Class DirectoryIteratorWithjava8 { public static void main (String [] args) löst Ausnahme {aus { Path Directory = paths.get ("/path/to/dir"); Dateien.Walk (Verzeichnis) .foreach (Pfad -> Showfile (path.toFile ())); } public static void showfile (Dateidatei) { if (file.isdirectory ()) { System.out.println ("Verzeichnis:" file.getabsolutepath ()); } anders { System.out.println ("Datei:" file.getabsolutepath ()); } } }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()); } } } }Dateien#Walk () generiert einen Stream von Pfadobjekten, die die Dateien und Verzeichnisse im gegebenen Verzeichnisbaum darstellen. Die Methode foreach () wird dann verwendet, um jedes Pfadobjekt zu verarbeiten und die entsprechende Datei oder das entsprechende Verzeichnis anzuzeigen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3