0

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

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と、true)ここで他の質問から得ました。それらが問題である可能性があると思いましたが、コメントアウトしてitems.xmlをプロジェクトフォルダーに直接書き込んだ後も、まだ空です。デバッグの目的で出力を追加しようとしましたが、期待どおりの結果が得られました。すべての変数出力は、本来あるべきものと一致します。

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

私が間違ったことについて何か考えはありますか?

4

1 に答える 1

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つだけになる可能性はほとんどありません。

于 2012-03-29T02:35:06.120 に答える