System.out und String machen was anderes

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
hey leute!

hab das problem, dass mein system.out was anderes macht als wenn ich das ganze in einen string speicher und dann zurückgebe! woran kann das liegen?

Code:
public void erzeugeDateiliste(File datei, int ebene)
    {
        
        File[] files = datei.listFiles();
        for(File file : files)
        {
            if(file.isDirectory())
            {
                for(int i = 0; i < ebene; i++)
                {
                    System.out.print("  ");
                }
                System.out.println(file.getName());
                erzeugeDateiliste(file, ebene+2);
            } else {
                for(int i = 0; i < ebene; i++)
                {
                    System.out.print("  ");
                }
                    System.out.println(file.getName() + " - " + file.length() + " Bytes");
                
            }
        }
           
    }

Code:
public void erzeugeDateilisteAlsString(File datei, int ebene)
    {
        String dateiliste = "";
        
        File[] files = datei.listFiles();
        for(File file : files)
        {
            if(file.isDirectory())
            {
                for(int i = 0; i < ebene; i++)
                {
                    dateiliste += "  ";
                }
                dateiliste += file.getName() + "\n";
                erzeugeDateiliste(file, ebene+2);
            } else {
                for(int i = 0; i < ebene; i++)
                {
                    dateiliste += "  ";
                }
                    dateiliste += file.getName() + " - " + file.length() + " Bytes\n";
                
            }
        }
        
        System.out.print(dateiliste);
           
    }
 
S

SlaterB

Gast
erzeugeDateiliste:
> System.out.println(file.getName());
> erzeugeDateiliste(file, ebene+2);

Ausgabe: Verzeichnisname, dann Unterdateien

--------

erzeugeDateilisteAlsString:
> dateiliste += file.getName() + "\n";
> erzeugeDateiliste(file, ebene+2);

Ausgabe: erst Unterdateien, Verzeichnisname erst später bei
> System.out.print(dateiliste);
 
G

Guest

Gast
wieso?? er fügt den verzeichnisnamen dem string ja nur hintendran und am schluss gebe ich dann die gesamte dateiliste aus...

also wieso gibt er deiner meinung nach die unterdateien vorm verzeichnis aus??

lg
 

hugo

Bekanntes Mitglied
Beschreibung mit Stringverlauf
Das Problem liegt daran, dass die Methode rekursiv aufgerufen wird und der String in der Methode nur lokal Gültigkeit besitzt. Es wird also zuerst die Dateiliste vom letzten Ordner genommen. Nach dem Schleifendurchlauf wird diese auf der Konsole ausgegeben. Dann geht er in den Ordner zuvor zurück und arbeitet die dortige Schleife auch noch einmal ab. Wenn dort alle Dateien durch sind, wird der Name des Unterordners, der schon gelistet wurde und dessen Daten ausgegeben. Dann geht er wieder höher usw.

Beispiel:
Ordner A hat einen Unterordner B und die dateien a1, a2, a3 und a4. B hat nur die Dateien b1, b2, b3.
Er geht also in A erzeugt dort einen lokalen String str_a
Die Methode findet das Verzeichnis B und speichert es in str_a.
Nun wird die Methode für B aufgerufen und der String str_b initialisiert. Dort findet er die Dateien b1, b2, b3 und schreibt sie in den String str_b. Nach Abschluss des Durchlaufes wird nun die Variable str_b auf der Konsole ausgegeben.
Weiter geht es im Ordner A wo die Dateien a1, a2, a3 der Variable str_a zugeordnet werden. Zum Schluss wird jetzt str_a ausgegeben.

Bei der anderen Variante werden die Daten sofort rausgejagt. Wenn der String mit der Dateiliste global gültig wäre (also außerhalb der Methode definiert würde) wäre auch alles wieder in der richtigen Reihenfolge
 
S

SlaterB

Gast
> wieso??

siehst du den Unterschied in folgendem Programm?

Code:
public class Test
{
    public static void main(String[] args)
    {
        System.out.println("a");
        System.out.println("b");



        System.out.println("---------");


        String st = "";
        st += "a";
        System.out.println("b");
        System.out.println(st);

    }
}
 

gladiator09

Bekanntes Mitglied
achsooooooooooo, jetzt hab ichs erst gesehen!

ich idiot hab in der erzeugeDateilisteAlsString ja rekursiv dann nicht die gleiche methode, sondern die erzeugeDateiliste() aufgerufen!

aber wenn ich die erzeugeDateilisteAlsString() aufrufe, dann wiederholt er mir jeden verzeichnisbaum eines pfades etliche male und ich habe keine ahnung wieso...

EDIT: ich glaub ich hab das problem: weil er eben immerwieder die methode aufruft und da ich am ende system.out.println(dateiliste) stehen hab, ruft er das immerwieder auf und gibt es auf der konsole auf, is klar...!

aber mir fallt keine lösung ein, wie ich das anders machen könnte...


EDIT2: ist das eine schlechte lösung?? aber mir fällt nix anderes ein...

Code:
public void erzeugeDateilisteAlsString(File datei, int ebene)
    {      
        
        File[] files = datei.listFiles();
        for(File file : files)
        {
            if(file.isDirectory())
            {
                for(int i = 0; i < ebene; i++)
                {
                    dateiliste += "  ";
                }
                dateiliste += file.getName() + "\n";
                erzeugeDateilisteAlsString(file, ebene+2);
            } else {
                for(int i = 0; i < ebene; i++)
                {
                    dateiliste += "  ";
                }
                    dateiliste += file.getName() + " - " + file.length() + " Bytes\n";
                
            }
        }
        
        strings.add(dateiliste);
                  
    }
    
    public void ausgeben()
    {
        System.out.print(strings.get(strings.size()-1));
    }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D System.out's in String speichern. Allgemeine Java-Themen 2
N Plugin-System: Klassen über String laden Allgemeine Java-Themen 3
G String in Fettschrift ausgeben (System.out) Allgemeine Java-Themen 6
X Input/Output InputStream/Scanner(System.in) read()/hasNextLine() block unterbrechen Allgemeine Java-Themen 7
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
B Lottospielen mit System, Versuch 2, noch umständlicher als vorher Allgemeine Java-Themen 1
J Frage zu System.getproperties. Allgemeine Java-Themen 60
sascha-sphw Erste Schritte Unit und Integration-Tests im Java Modul System Allgemeine Java-Themen 10
F Frage zu System.in Allgemeine Java-Themen 3
E System property setzten Allgemeine Java-Themen 8
Kirby.exe Movement System für Spiel Allgemeine Java-Themen 13
O Beziehung System.exit(x) <>Errorlevel Allgemeine Java-Themen 2
B System.out Ausgabe auf jtextarea Fehlersuche Allgemeine Java-Themen 8
F System Tray Menubutton ActionListener Allgemeine Java-Themen 5
H Im Tiled-Map-System ein Item anklicken Allgemeine Java-Themen 0
S Java Plugin System (ohne OSGI) Allgemeine Java-Themen 10
D System.arraycopy verhält sich seltsam Allgemeine Java-Themen 1
C Login System Allgemeine Java-Themen 19
A BufferedReader ohne System.in Allgemeine Java-Themen 9
VfL_Freak JDK installieren System-Property "user.dir" Allgemeine Java-Themen 6
J System.arraycopy ergibt anderes Resultat als for-loop Allgemeine Java-Themen 4
F Wie kann ich auf einem System prüfen, ob eine lib verfügbar ist? Allgemeine Java-Themen 2
D Java System.out::println Allgemeine Java-Themen 1
D Methoden Java Applikation Die System Auslastung optimieren ? Allgemeine Java-Themen 7
S Ist Java ein geschlossenes System? Allgemeine Java-Themen 2
L Erste Schritte Suche Java Wiki System? Allgemeine Java-Themen 5
chuxXo System/JLayer Volume ändern Allgemeine Java-Themen 0
Neumi5694 System.out und System.err umleiten - NICHT im Quelltext Allgemeine Java-Themen 4
X System.out/err(Die Console) in JTextArea ausgeben Allgemeine Java-Themen 2
S Best Practice System.arrayCopy verändert Ziel-Array Allgemeine Java-Themen 2
A Methoden Der Sinn von system.out.print(); Allgemeine Java-Themen 9
A System freezes when trying to run external command from Java with wait for Allgemeine Java-Themen 3
A Java | Login-System Allgemeine Java-Themen 3
C System.out.print("") Compiler Fehler Allgemeine Java-Themen 2
Joew0815 Best Practice Wie am besten Plugin-System erstellen? Allgemeine Java-Themen 12
C System.in erhält Input von Tastatur. wo wird das festgelegt? Allgemeine Java-Themen 4
F Benachrichtigungs-System Webapp Java Servlet Allgemeine Java-Themen 10
M collection persistence system Allgemeine Java-Themen 4
V System.out.println an jeder Stelle im Projekt löschen Allgemeine Java-Themen 4
H Interpreter-Fehler ArrayIndexOutOfBoundsException bei System.arraycopy() Allgemeine Java-Themen 3
M System herausfinden Allgemeine Java-Themen 6
O Variablen System.getenv: Sinnlose Werte, Arrays?! Allgemeine Java-Themen 6
G java.exe in System 32. Hilfe!!! Allgemeine Java-Themen 8
R Methoden Tag System Problem Allgemeine Java-Themen 3
J System.out im GUI anzeigen Allgemeine Java-Themen 3
N System.exit(0/1) Allgemeine Java-Themen 3
F System.out.println mit log4j ersetzen Allgemeine Java-Themen 10
D System.LoadLibrary(..) - Programm stürzt ab Allgemeine Java-Themen 2
U Classpath DLLs mittels System.load() laden: Allgemeine Java-Themen 6
D Listener auf System.out.err / System.out.println Allgemeine Java-Themen 5
G Input/Output System.in "umbiegen" für junit-Test Allgemeine Java-Themen 4
Kr0e User management system Allgemeine Java-Themen 2
S Java Programm -System Neustart überleben? Allgemeine Java-Themen 3
Rudolf Wann System.exit und wann dispose? Allgemeine Java-Themen 9
ruutaiokwu System.out auf files umlenken in log4j.xml Allgemeine Java-Themen 4
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
agent47 Plugin System Verständnisfrage Allgemeine Java-Themen 6
M Wie externe System-Ressourcen zwangsweise freigeben Allgemeine Java-Themen 2
E Durch System.in.read() blockierten Thread stoppen Allgemeine Java-Themen 10
P System.out im Eclipse plugin Allgemeine Java-Themen 4
C File System Watcher Allgemeine Java-Themen 2
S Verhalten von System.getenv() in Ubuntu / Linux Allgemeine Java-Themen 12
A Problem mit System.getProperty(...) Allgemeine Java-Themen 5
D System.loadlibrary funktioniert nicht Allgemeine Java-Themen 6
H Event ähnliches System Allgemeine Java-Themen 20
Dissi Gammawerte des Grafiktreibers / System ändern? Allgemeine Java-Themen 3
M Plugin-System Allgemeine Java-Themen 4
A NullPointer bei System.getProperty("file.seperator") Allgemeine Java-Themen 4
R System.out oder System.err? Allgemeine Java-Themen 10
M Wie kann ich alle System.out Strings in ein log window umleiten? Allgemeine Java-Themen 6
K System.exec() Programm mit mehreren Parametern Allgemeine Java-Themen 8
G unerklärliches System.out Allgemeine Java-Themen 3
M System.setProperty("javax.net.ssl.trustStore", "mykey.pkx"); Allgemeine Java-Themen 1
T System Preferences + LInux (Ubuntu) Allgemeine Java-Themen 8
G OutputStream to System.out Allgemeine Java-Themen 35
J Wo werden die System properties gespeichert Allgemeine Java-Themen 12
C JSR295 in Produktiven System zu empfehlen? Allgemeine Java-Themen 3
B System CPU Zeit / Last auslesen Allgemeine Java-Themen 2
G Bringt es etwas System.gc() nach großen Aufgaben aufzurufen? Allgemeine Java-Themen 2
T Feststellen ob System-Konsole verfügbar Allgemeine Java-Themen 2
L remote debugging of a multi threaded system Allgemeine Java-Themen 2
F Probleme mit eigenem Plugin-System Allgemeine Java-Themen 3
L System.exit Allgemeine Java-Themen 3
G System.out im window h.inein bringen? Allgemeine Java-Themen 8
A System.in pipen Allgemeine Java-Themen 3
P System.getProperty zu Classloader Allgemeine Java-Themen 21
I Am System angemeldeten Benutzer abfragen Allgemeine Java-Themen 11
E System.out umleiten Allgemeine Java-Themen 2
S system.out und system.err einer Methode in Datei schreiben. Allgemeine Java-Themen 7
S System Informationen auslesen. Allgemeine Java-Themen 3
N Thread und System.out.print() Allgemeine Java-Themen 2
K Kann man System.out in eine Datei speichern? ähnlich wie log Allgemeine Java-Themen 7
B Native DLL zweimal laden: System.load(sPath); Allgemeine Java-Themen 5
P System.getProperty("user.dir") Allgemeine Java-Themen 10
K Abfrage ob JRE oder JDK auf System installiert ist. Allgemeine Java-Themen 12
B serlvet system.out ausgabe Allgemeine Java-Themen 4
O System.nanoTime() einheitlichen Wert auf mehreren Rechnern? Allgemeine Java-Themen 9
T System-Monitoring in Echtzeit Allgemeine Java-Themen 2
E System.out.println Allgemeine Java-Themen 5
G Umrechnen von grossen Zahlen ins Hex-System Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben