ERLEDIGT
JA
JA
ANTWORTEN
5
5
ZUGRIFFE
763
763
EMPFEHLEN
-
Guten Morgen Zusammen!
Ich habe folgendes Problem:
Der Inhalt eines Verzeichnisses soll in einer Baumform in der Konsole ausgegeben werden. Dazu habe ich folgende Methode, welche den Verzeichnisbaum vom übergebenen File-Objekt rekursiv durchläuft:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
private void execute(File dir) { File[] files = dir.listFiles(); if (files != null) { for (int i = 0; i < files.length; i++) { System.out.print("| "); if (files[i].isDirectory()) { System.out.println("./" + files[i].getName() + "(Folder)"); execute(files[i]); } else { System.out.println("| ./" + files[i].getName() + "(File)"); } } } }
Das Traversieren durch die Verzeichnisse funktioniert auch wunderbar, allerdings gibt es nicht die erhoffte Ausgabe, wie etwa
Code :1 2 3 4 5 6 7 8 9 10 11 12
| ./test | | ./test/01 | | | ./test/01/1.txt | | | ./test/01/2.txt | | | ./test/01/3.txt | | ./test/02 | | | ./test/02/1.txt | | ./test/03 | | | ./test/03/1.txt | | | ./test/03/2.txt | ./test01 | ./test02
Weiß jemand, was ich für die korrekte Baumdarstellung tun muß? Stehe da gerade ziemlich auf dem Schlauch und sehe den Wald vor lauter Baumen nicht mehr..
Vielen Dank im Voraus und Grüße!
-
17.10.11 10:55 #2SE Tutorials.de Gastzugang
Das Problem ist das du in deinem for()-Loop immer wieder am Anfang der Zeile beginnts. Was du also brauchst ist ein zusätzlicher Parameter der die Verzeichnistiefe angibt ... und mit Hilfe dessen du in einem weiteren for()-loop die | schreibst und dann erst den Verzeichnis- oder Dateinamen. Einfach am Anfang eines rekursiven Aufrufs EINMAL das gewünschte zu schreiben reicht nicht. Du musst es jedes mal ausgeben ... und natürlich auch entsprechend oft. Da hilft nur ein Counter ...
-
Vielen Dank erstmal dafür!
Daran habe ich auch gedacht,aber wie implementiere ich den in diesem Fall? Der Counter würde sich doch nach jedem rekursiven Aufruf wieder neu initialisieren, oder irre ich mich****
-
Eigentlich kein Counter sondern ein Parameter der die ebene angibt.
Beim ersten Aufruf der Methode wird 1 übergeben oder kein wert. (kein wert = 1 )
und bei jeden schritt tiefer in den Baum wird der übergebene Parameter mit wert+1 übergeben.
Dann musst du nur noch für den Parameterwert x mal dein | schreiben und schon hast du das so wie du möchtest.
vielleicht mit einer überladenen Methode
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
private void execute(File dir){ execute(dir, 1); } private void execute(File dir, int wert){ File[] files = dir.listFiles(); if (files != null) { for (int i = 0; i < files.length; i++) { System.out.print("| ");//<-- Schleife einfügen ;) if (files[i].isDirectory()) { System.out.println("./" + files[i].getName() + "(Folder)"); execute(files[i], wert +1); } else { System.out.println("| ./" + files[i].getName() + "(File)"); } } } }
-
Funktioniert aber immer noch nicht wie erhoft..Was mache ich falsch?Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
public void execute(File dir, int index) { File[] files = dir.listFiles(); if (files != null) { for (int i = 0; i < files.length; i++) { for(int j = 0; j <= index; j++) { System.out.print("| "); } if (files[i].isDirectory()) { System.out.println("./" + files[i].getName() + "(Folder)"); execute(files[i], index+1); } else { System.out.println("| ./" + files[i].getName() + "(File)"); } } } }Geändert von ComFreek (17.10.11 um 17:05 Uhr) Grund: Code-Tags ;)
-
Hat sich erledigt. Hatte nur noch Fehler in der Ausgabe. Vielen Dank für die Hilfe.
Ähnliche Themen
-
Rekursive Multiplikation
Von FiselM im Forum JavaAntworten: 16Letzter Beitrag: 05.01.08, 20:19 -
rekursive Navigation
Von Sebigf im Forum PHPAntworten: 2Letzter Beitrag: 03.03.06, 00:22 -
XSLT: Baumdarstellung
Von Andreas_CH im Forum XML TechnologienAntworten: 1Letzter Beitrag: 07.09.05, 17:10 -
Baumdarstellung integrieren
Von langer1801 im Forum VisualStudio & MFCAntworten: 8Letzter Beitrag: 28.06.05, 16:14 -
rekursive funktion
Von thespecialx im Forum JavaAntworten: 1Letzter Beitrag: 08.12.04, 21:13





Zitieren
Login





