5

Java追加データでファイルを開き、何度も閉じることは可能ですか? 例えば:

 //---- psuedocode
      //class variable declaration 
      FileWriter writer1 = new FileWriter(filename);

      fn1:

         writer.append(data - title);

      fn2:
       while(incomingdata == true){
         writer.append(data)
         writer.flush();
         writer.close()
        }

問題は while ループにあります。ファイルは閉じられており、再度開くことはできません。誰でもこれで私を助けることができますか?

4

4 に答える 4

2

毎回ファイルを閉じて再度開くことを勧める答えは非常に正しいです。

ただし、絶対にこれを行う必要がある場合 (そして、そうするかどうかは私にはわかりません)、毎回新しい FileWriter を作成できます。FileWriter を作成するときに 2 番目の引数として true を渡し、ファイルを置き換えるのではなく追加するものを取得します。お気に入り

FileWriter writer1 = new FileWriter(filename, true); 
于 2012-03-20T07:21:39.030 に答える
2

ストリームが閉じられると、さらに write() または flush() を呼び出すと、IOException がスローされます。ただし、以前に閉じたストリームを閉じても効果はありません。

 while(incomingdata == true){
         writer.write(data)
 }
 writer.close()

毎回流す必要はありません。呼び出しclose()は、ストリームを閉じる前に最初にデータをフラッシュするためです。

の更新

作成したファイルを保存する必要があります。タイムスタンプが更新されるように、それを閉じることになっています。それは、ファイルがライブで同期されるときです。

このように使用してください

while(incomingdata == true){
             writer.append(data);
             writer.flush();
}
writer.close();
于 2012-03-20T07:22:01.160 に答える
1

ファイルを閉じたら、もう一度開く必要があります。呼び出しwriter.flush()はストリームをフラッシュする必要があります。したがって、基本的には、ループwriter.close()内から削除します。whileこれにより、作業が終了したらファイルを閉じることができます。

したがってwriter.close()、ループ内から削除するか、ループの最初にwhile新しいFileWriterインスタンスを作成するという 2 つのオプションがあります。

于 2012-03-20T07:21:39.950 に答える
0

ファイルを閉じてから再度開くことはお勧めしません。ファイルを開くのはコストのかかる操作であり、これを行う回数が少ないほど、コードの実行速度が向上します。

ファイルを一度開き、書き込みが完了したらファイルを閉じます。これはループの外になります。

于 2012-03-20T07:20:32.477 に答える