0
public static void print(String id) {
    try{
        FileWriter fstream = new FileWriter("out.txt");
        BufferedWriter out = new BufferedWriter(fstream);
        out.write(id +"\n");
        out.close();
    }catch (Exception e){
    }
}   

私はこのメソッドを実行時に何十万回も呼び出しますが、最初の行を上書きし続けます。どうすれば一番下の行から始めることができますか?(エスケープシーケンスで定義されている次の行を処理します。)

または、よりエレガントなソリューションはありますか?シミュレーション結果を保存するためにテキストファイルを何十万回も開いたり閉じたりするのは、あまり効率的ではありません。しかし、繰り返しになりますが、すべての実行の最後にメインでout.closeを実行すると、I/Oに関連するすべてがtry/catchブロックに入れられるべきだと言う多くの人々と衝突します(また、私は実行されない関数や定義されていない関数などを処理する必要があります)。

4

2 に答える 2

1

何を探しているのかわかりませんが、ファイルに追加する方法を探している場合は、試してみてください

FileWriter fstream = new FileWriter("out.txt", true);

コンストラクターとして

public FileWriter(File file, boolean append)

指定されたファイルに追加し、上書きしません。

于 2012-12-04T06:54:39.277 に答える
1

はい、使用するようにコードを変更できますnew FileWriter("out.txt", true)。それはファイルに追加されます。ただし、他の代替手段があります。

  • の代わりに(a をラップ) を使用することを強くお勧めします。そうすれば、ファイルのエンコーディングを指定できます。どのエンコーディングにしたいですか?(この方法でも追加できます。適切なコンストラクターを使用するだけです。)OutputStreamWriterFileOutputStreamFileWriterFileOutputStream

  • なぜあなたはを使用していBufferedWriterますか?ライターに文字列を書き込んでから、ライターを閉じます。バッファリングにはどのような効果があると思いますか?

  • 現在、すべての例外を飲み込んでいます。黙って飲み込みたい場合でも、他の例外IOExceptionを飲み込むべきではありません。可能な場合は常に特定の例外をキャッチしてください。

  • 例外がスローされた場合、あなたはファイルではありません。常にfinallyブロックでリソースを閉じるかtry-with-resources、Java 7 でステートメントを使用する必要があります。

  • 書き込むたびにファイルを再度開く必要がありますか? 開いたままにして、必要なときにいつでも書き込んでみませんか? 次に、アプリケーションのシャットダウン時に閉じます。

于 2012-12-04T07:04:57.463 に答える