Das Verzeichnis d:/a als Beispiel unter der Annahme, dass die Struktur im D:/A -Verzeichnis wie folgt lautet:
d:/a | --a.sql |--back.log |--b | |-e | | --1.txt | | --2.txt | | --3.txt | `--f | | --4.txt | | --5.txt | `--6.txt |--c | |-e | | --ace1.txt | | --ace2.txt | | --ace3.txt | `--f | | --4.txt | | --5.txt | `--6.txt`--d | --a.java | --abc (1) .txt | --abc (2) .txt | --abc (3) .txt |--b.java` --c.java
4.1 Beispiel 1: Listendateien im gesamten Verzeichnis (rekursiv) auflisten
Ideen:
1. Übertragen Sie das Verzeichnis d:/a.
2. Jedes Mal, wenn Sie ein Verzeichnis in d:/a durchlaufen, iterieren Sie dieses Unterverzeichnis. Daher ist es notwendig zu bestimmen, ob jedes durchlaufende Element ein Verzeichnis ist.
Hier sind einige der Codes vom normalen Code zum rekursiven Code:
Datei DIGR = New File ("d:/a"); Datei [] file_list = dirl.listfiles (); für (Dateiliste: file_list) {if (list.isdirectory ()) {Datei DIR_1 = list.listFiles (); // Der Code startet hier und kann logisch unendlich rekursiv sein, wenn (Dir_1.isdirectory ()) {....}} else {System.out.println (list.getabsolutepath ()); }}Die wiederholten Code -Teile werden eingekapselt, sodass die rekursive Methode verwendet wird, um den Code zu verringern und das unendliche rekursive Problem zu lösen. Der endgültige Code lautet wie folgt:
Java.io importieren. System.out.println ("Dir ------>"+Dir.getabsolutepath ()); Listall (Dir); } public static void listAll (file ide) {file [] file_list = dirl.listfiles (); für (Dateidatei: Datei_List) {if (file.isdirectory ()) {System.out.println ("Dir ------>"+file.getabsolutepath ()); listall (Datei); } else {System.out.println ("Datei ------->"+file.getabsolutepath ()); }}}}4.2 Beispiel 2: Listendateien (Warteschlangen) im gesamten Verzeichnis
Ideen:
1. Iterieren Sie über das gegebene Verzeichnis. Geben Sie den Verzeichnisnamen, den Sie in die Sammlung durchquert haben, ein.
2. Iterieren Sie über jedes Verzeichniselement in der Sammlung und fügen Sie die durchquerten Unterverzeichnisse in die Sammlung hinzu. Löschen Sie es schließlich aus der Sammlung nach jedem Traversal.
3. So lange wird es weiterhin durchqueren, solange das Verzeichnis gefunden wird, bis ein bestimmtes Verzeichnis durchquert wird und das nächste Verzeichnis auf derselben Ebene zu durchqueren wird.
Was zu berücksichtigen ist, ist welche Art von Sammlung verwendet werden soll. Zunächst müssen die Verzeichniselemente in der Sammlung nicht sortiert werden, und die Unterverzeichnisnamen in verschiedenen Verzeichnissen können wiederholt werden. Daher wird die Listensammlung anstelle der SET -Sammlung verwendet. Da Elemente häufig hinzugefügt und gelöscht werden, wird die LinkedList anstelle der ArrayList -Sammlung verwendet. Das bekannteste Merkmal der LinkedList -Sammlung ist die FIFO -Warteschlange.
Im Vergleich zum rekursiven Traversal besteht der Vorteil der Verwendung von Warteschlangen, um das Verzeichnis zu durchqueren, dass Elemente in Containern platziert werden und sie alle im Heap -Speicher sind, was es schwierig macht, den Speicher zu überfließen.
Java.util importieren.*; Java.io importieren. Queue <Datei> file_queue = new Queue <Datei> (); // eine Warteschlangendatei konstruieren [] list = dir.Listfiles (); für (Dateidatei: Liste) {// Übertragen Sie das Top-Level-Verzeichnis if (Datei.isdirectory ()) {System.out.println ("Dir ------>"+file.getabsolutepath ()); Datei_queue.add (Datei); } else {System.out.println ("Datei ------>"+file.getabsolutepath ()); }} while (! File_queue.isnull ()) {// Start im sekundären Unterverzeichnis, Traverse -Datei subdirs = file_queue.get (); // Erstens die sekundäre Unterverzeichnisname -Datei [] subfiles = subdirs.listfiles () erhalten; für (Datei-Subdir: Unterfilme) {// transpraight jedes Subdirektorium im nächsten Level if (subdir.isdirectory ()) {System.out.println ("Dir ------>"+subdir.getabsolutepath ()); Datei_queue.add (subdir); // Wenn es in der inneren Ebene ein Unterverzeichnis gibt, fügen Sie der Warteschlange hinzu} else {System.out.println ("Datei ------->"+subdir.getabsolutepath ()); }}}}}}}}}} class Queue <E> {private linkedList <E> LinkedList; Queue () {linkedList = new LinkedList <E> (); } public void add (e e) {linkedList.addfirst (e); // Advanced} public e get () {return linkedList.removelast (); // First Out} public boolean isnull () {return linkedList.isempty (); }}4.3 Beispiel 3: Die Baumstruktur zeigt Dateien im gesamten Verzeichnis an (rekursiv)
Ideen:
1. Listen Sie zuerst die Verzeichnisse und Dateien der ersten Ebene auf.
2. Wenn es sich um ein Verzeichnis handelt, fügen Sie ein Präfix -Symbol hinzu, das eine Baumform bildet. Dann durch dieses Verzeichnis iterieren, das rekursive Traversal erfordert.
Java.io importieren. System.out.println (Dir.getName ()); Listchilds (Dir, 1); } public static void ListChilds (Datei f, int Level) {String prefix = ""; für (int i = 0; i <Ebene; i ++) {Präfix = "|"+Präfix; } File [] file = f.listfiles (); für (Dateidatei: Dateien) {if (file.isdirectory ()) {System.out.println (Präfix + file.getName ()); Listchilds (Datei, Ebene+1); } else {System.out.println (Präfix + file.getName ()); }}}}Die Ergebnisse sind wie folgt:
a | A.SQL | B | | e | | 1.Txt | | | 2.txt | | | 3.txt | | f | | 4.txt | | | 5.txt | | | 6.txt | zurück.log | c | | e | | | ace1.txt | | | ace2.txt | | | ace3.txt | | f | | | 4.txt | | | 5.txt | | | 6.txt | d | | A.Java | | ABC (1) .txt | | ABC (2) .txt | | ABC (3) .txt | | B.Java | | C.Java
4.4 Löschen Sie das gesamte Verzeichnis
Java.io importieren. RM (Datei); } public static void rm (Datei f) {if (! f.exists ()) {System.out.println ("Datei nicht gefunden!"); zurückkehren; } else if (f.isfile ()) {f.delete (); zurückkehren; } File [] dir = f.listfiles (); für (Dateidatei: dir) {rm (Datei); } f.delete (); }}Zusammenfassen
Das obige ist die Liste der Java Display Directory -Datei und das vom Editor vorgestellte Löschverzeichnis. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!