-1

BufferedWriter を使用して、データをテキストファイルに書き込みます。ODBC を使用して Access に書き込むよりも高速です。コードは次のようになります。

BufferedWriter bw = new BufferedWriter(new FileWriter(new File(filePath), true));

True は、BufferedWriter を上書きではなく、追加することです。

bw.append(          
    country + "\t" +
    scenario + "\t" +
    tempStage + "\t" +
    year + "\t" +
    tempState
);

以前のプロジェクトでうまくいきました。新しい問題: 列の途中でクラップアウトするだけです。これは良い行です:

SultanateOfBrunei   BeeBeeScenario  Other   2019

通常、最後の行は次のようになります。

SultanateOfBrunei   BeeBeeScenario  Other   2019 Nondyna

またはスルタ

またはすう

そのような奇妙な不完全な行を無視するエラー処理コードを入れました。

This means not all the data is being written. I can give up one datum, no problem... But it appears to be cutting out more. The simulation runs 1990 to the end of 2020 and it typically craps out somewhere in 2019. Increasing the VM helps a little-- it gets further. But I only have a certain amount of memory!

Any insights?

Thanks!!

4

4 に答える 4

5

アプリケーションが BufferedWriter を閉じていない可能性があり、その結果、出力の最後の部分がファイルに書き出されていません。

プログラムの構造は次のようになります。

BufferedWriter bw = new BufferedWriter(new FileWriter(new File(filePath), true));
try {
    // generate output
} finally {
    bw.close();
}

これは、ライターを開く、書き込む、または閉じるときに発生する可能性のある I/O 例外を処理しようとしないことに注意してください。それを行うべきかどうか、およびキャッチした例外に対して何をすべきかは、状況によって異なります。

于 2012-09-21T15:49:17.397 に答える
1

書き込みが完了したら、基本的close()に BufferedWriter オブジェクトを呼び出す必要があります。これにより、ストリームがフラッシュされ、結果として閉じられることが保証されます。

于 2012-09-21T15:51:14.550 に答える
1

おそらくbw.flush()、ストリームを閉じる前にストリームをフラッシュ ( ) していません。これはすべてのストリームに対して行う必要がありますが、バッファリングされたストリームではより重要です。

于 2012-09-21T15:48:15.440 に答える
1

BufferedWriter を閉じるだけです。そうしないと、最後に満たされたバッファーが書き込まれない可能性があります。

于 2012-09-21T15:51:01.813 に答える