2012-03-29 15 views
0

私はゲームのプロジェクトで作業しています。ファイルに正しく書き込むことができません。ある時点で作業していましたが、いくつかの点を変更し、writeメソッドを別のクラスに移動しました。その過程のどこかで、私は何かを壊したに違いない。ディレクトリへのJavaの書き込みは、ファイルを作成するだけです

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()); 
    } 
} 

// File.seperatorと、実際のところ私は他の質問から得ました。私はそれらが問題であるかもしれないと思ったが、それらをコメントアウトして、単にitems.xmlを自分のプロジェクトフォルダに書き込むと、それはまだ空です。 私はデバッグの目的でいくつかの出力を追加しようとしましたが、私は期待したものを得ました。すべての変数出力は必要なものと一致します。

ファイルは正しいフォルダに作成されますが、何も書き込まれていません。

私が間違っていたことに関するアイデアはありますか?

答えて

1

内容がディスクにフラッシュされるようにファイル記述子を閉じる必要があります。

追加:

out.close(); 

あなたの方法になるように:

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()); } 
} 

close()への呼び出しがなければ、あなたはファイルディスクリプタをリークしていると、十分な長さの時間の後、あなたがなりたいです書き込みのためにこれ以上ファイルを開くことができません)。

は、ファイルを書き込むたびにを付加することになります(毎回切り捨てずに最初から開始する)。 XMLを書いているので、1つのルート要素で終わることはまずありません。

+1

+1頭に釘を打つ。私の唯一の苦情:私は朝のファイルディスクリプタの漏れの臭いが大好きです... – bernie

+0

うん、それは私が(再び)忘れたものです。余分な目に感謝します。 – Deedasmi

関連する問題