2012-03-29 12 views
0

Ich arbeite an einem Projekt für ein Spiel, das ich spiele, und ich kann nicht scheinen, es in eine Datei richtig zu schreiben. Ich hatte es an einem Punkt funktioniert, aber änderte einige Dinge herum und bewegte die Schreibmethode in eine andere Klasse. Irgendwann musste ich etwas kaputt gemacht haben.Java Schreiben in Verzeichnis erstellt nur Datei

public static void write(item a) { 
    //Variable declaration. outp is private instance String array 
    outp[0] = "<" + a.getID() + ">\n"; 
    outp[1] = "<name>" + a.getName() + "</name>"; 
    outp[2] = "<description>" + a.getDesc() + "</description>\n"; 
    outp[3] = "<type>" + a.getType() + "</type>\n"; 
    outp[4] = a.getOtherCode() + "\n"; 
    outp[5] = "</" + a.getID() + ">\n"; 
    try{ 
    //Create/Append data to items.xml located in variable folder. 
    FileWriter writeItem = new FileWriter(modTest.modName + File.separator +"items.xml", true); 
    BufferedWriter out = new BufferedWriter(writeItem); 

    //Loop through array and write everything 
    for(int i = 0; i < outp.length; i++) { 
     System.out.println("outp[" + i + "] = " + outp[i]); 
     System.out.println("Writing line " + i + " of item "+ a.getID()); 
     out.write(outp[i]); 
    } 

    }catch (Exception e) { System.err.println("Erro: " + e.getMessage()); 
    } 
} 

// Die File.seperator und, true) bekam ich von anderen Fragen hier. Ich dachte, das könnte das Problem sein, aber nachdem ich sie kommentiert und einfach items.xml direkt in meinen Projektordner geschrieben habe, ist es immer noch leer. Ich habe versucht, einige Ausgaben für Debugging-Zwecke hinzuzufügen, und ich habe genau das, was ich erwartet habe. Alle variablen Ausgaben stimmen überein, was sie sollten.

Die Datei wird im richtigen Ordner erstellt, aber nichts wird darauf geschrieben.

Irgendwelche Ideen, was ich falsch gemacht habe?

Antwort

1

Sie müssen den Dateideskriptor schließen, damit der Inhalt auf den Datenträger übertragen wird.

Anzahl:

out.close(); 

, so dass Ihre Methode wird:

public static void write(item a) { 
    //Variable declaration. outp is private instance String array 
    outp[0] = "<" + a.getID() + ">\n"; 
    outp[1] = "<name>" + a.getName() + "</name>"; 
    outp[2] = "<description>" + a.getDesc() + "</description>\n"; 
    outp[3] = "<type>" + a.getType() + "</type>\n"; 
    outp[4] = a.getOtherCode() + "\n"; 
    outp[5] = "</" + a.getID() + ">\n"; 

    try { 
    //Create/Append data to items.xml located in variable folder. 

    FileWriter writeItem = new FileWriter(modTest.modName + File.separator +"items.xml", true); 
    BufferedWriter out = new BufferedWriter(writeItem); 

    //Loop through array and write everything 

    for(int i = 0; i < outp.length; i++) { 
     System.out.println("outp[" + i + "] = " + outp[i]); 
     System.out.println("Writing line " + i + " of item "+ a.getID()); 
     out.write(outp[i]); 
    } 

    out.close(); 
    } 
    catch (Exception e) { System.err.println("Erro: " + e.getMessage()); } 
} 

Ohne den Aufruf von close(), Sie undichte Filedeskriptoren und nach einer lange genug Zeit, würden Sie sein kann nicht mehr Dateien zum Schreiben öffnen).

Beachten Sie auch, dass Sie an die Datei bei jedem Schreiben anhängen (anstatt es zu kürzen und jedes Mal von vorne anzufangen). Da Sie XML darauf schreiben, ist es unwahrscheinlich, dass Sie nur mit einem Wurzelelement enden.

+1

+1 für den Nagel auf den Kopf schlagen. Meine einzige Beschwerde: Ich liebe den Geruch von undichten Datei-Deskriptoren am Morgen ... – bernie

+0

Ja, das habe ich (wieder) vergessen. Danke für das zusätzliche Augenpaar. – Deedasmi