0

したがって、プログラム内に次のコードがあります。私がやろうとしているのは、プログラムのメインで宣言した変数を csv ファイルに出力することです。csv ファイルに既にあるものを置き換えたい (ファイルはコードのこの部分に到達する前に存在するため、既にあるものを置き換えるだけです)。今、私は (myFoo, false) を試しましたが、何が起こるかというと、プログラムは AZ を反復し、csv ファイルに Z だけを残します。Zにあるものだけでなく、AZからのすべてをcsvファイルに書き込んでほしい.

私のコード:

     for(int t=0; t<superArray.size(); t++) {

         String temp = superArray.get(t).character;
         int temp2 = superArray.get(t).quantity;
         int temp3 = superArray.get(t).width;
         String temp4 = superArray.get(t).color;
         int temp5 = superArray.get(t).height;

         String eol = System.getProperty("line.separator");

         String line=temp+","+temp2+","+temp3+","+temp4+","+temp5 + eol;


         File myFoo = new File("Letters.csv");
         FileWriter fooWriter = new FileWriter(myFoo, true); 


         fooWriter.write(line);
         fooWriter.close();

私が試してみようと思った次のこと..おそらくできると思いました (myFoo、true) ファイルに書き込む直前に、csv ファイルの元のコンテンツを消去します。したがって、空の csv ファイルに追加されます。

         File myFoo = new File("Letter_Inventory.csv");
         myFoo.createNewFile();
         FileWriter fooWriter = new FileWriter(myFoo, true);

ロジックは私には良さそうに思えますが、明らかにうまくいかなかったので、私は今ここにいます。何か案は?ありがとう!

4

1 に答える 1

0

for ループを繰り返すたびに、ファイルを再度開いたり閉じたりしています。これにより、ループの前の繰り返しからファイルに書き込まれたものはすべて上書きされます。解決策は次のとおりです。そうしないでください。ファイルを 1 回開き、 for ループの前に開きます。

変化する

for(int t=0; t<superArray.size(); t++) {

     // ....etc....
     String line=temp+","+temp2+","+temp3+","+temp4+","+temp5 + eol;

     File myFoo = new File("Letters.csv");
     FileWriter fooWriter = new FileWriter(myFoo, true); 


     fooWriter.write(line);
     fooWriter.close();
}

これに

// file created *before* the for loop
File myFoo = new File("Letters.csv");
FileWriter fooWriter = new FileWriter(myFoo, true); 

for(int t=0; t<superArray.size(); t++) {

     // .... etc ....
     String line=temp+","+temp2+","+temp3+","+temp4+","+temp5 + eol;
     fooWriter.write(line); // line written inside for loop

}

// this should be in the finally block.
fooWriter.close();
于 2013-05-05T02:31:09.940 に答える