tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
763
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    blindmind blindmind ist offline Mitglied
    Registriert seit
    Apr 2006
    Beiträge
    17
    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!
     

  2. #2
    SE 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 ...
     

  3. #3
    blindmind blindmind ist offline Mitglied
    Registriert seit
    Apr 2006
    Beiträge
    17
    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****
     

  4. #4
    wakoz wakoz ist offline Mitglied Gold
    Registriert seit
    Apr 2010
    Beiträge
    114
    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)");
                    }
                }
            }
    }
     

  5. #5
    blindmind blindmind ist offline Mitglied
    Registriert seit
    Apr 2006
    Beiträge
    17
    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)");
                    }
                }
            }
        }
    Funktioniert aber immer noch nicht wie erhoft..Was mache ich falsch?
    Geändert von ComFreek (17.10.11 um 17:05 Uhr) Grund: Code-Tags ;)
     

  6. #6
    blindmind blindmind ist offline Mitglied
    Registriert seit
    Apr 2006
    Beiträge
    17
    Hat sich erledigt. Hatte nur noch Fehler in der Ausgabe. Vielen Dank für die Hilfe.
     

Ähnliche Themen

  1. Rekursive Multiplikation
    Von FiselM im Forum Java
    Antworten: 16
    Letzter Beitrag: 05.01.08, 20:19
  2. rekursive Navigation
    Von Sebigf im Forum PHP
    Antworten: 2
    Letzter Beitrag: 03.03.06, 00:22
  3. XSLT: Baumdarstellung
    Von Andreas_CH im Forum XML Technologien
    Antworten: 1
    Letzter Beitrag: 07.09.05, 17:10
  4. Baumdarstellung integrieren
    Von langer1801 im Forum VisualStudio & MFC
    Antworten: 8
    Letzter Beitrag: 28.06.05, 16:14
  5. rekursive funktion
    Von thespecialx im Forum Java
    Antworten: 1
    Letzter Beitrag: 08.12.04, 21:13