0

これが私のスニペットです。

File file = new File(Thread.currentThread().getName());

for(each element of the list){
createStringWriterAndPopulateDataToBeWritten
FileOutputStream fo = new FileOutputStream(file);
OutputStreamWriter out = new OutputStreamWriter(fo,"UTF-8");
out.write(sw.toString());
out.close();
}

今、私はnewFixedThreadPoolサイズのを持っていると言いSます; このスレッドプールに、実行する作業のリストを渡します。これで、スレッドが呼び出されるたびに、スレッドの名前としてnameを使用してファイルが作成され、それに書き込まれますが、ループではファイルが上書きされるだけです。

スレッドが再度呼び出された場合でも、追加して上書きしないようにするにはどうすればよいですか。これは、スレッドプールへの作業のリストがかなり長いため、この場合に非常に発生する可能性があります。

注:ThreadPoolに渡されるジョブのリストの各要素もリストであるため、スニペットにforループがあります。

ありがとう。

4

1 に答える 1

2

しかし、ループではファイルを上書きするだけです。

はいFileOutputStream 、ループ内で作成しています。ループの前にFileOutputStream(およびOutputStreamWriter)を作成し、ループに書き込むだけで、操作全体に対して単一のファイルが作成されます。

コードが例外をスローした場合でもライターを閉じるために、close呼び出しはブロック内にある必要があることに注意してください。finally

このコードが再度呼び出されたときにファイルに追加する必要がある場合は、次のように変更してください。

FileOutputStream fo = new FileOutputStream(file);

FileOutputStream fo = new FileOutputStream(file, true);

ドキュメントによると、2番目の引数は、追加(true)するか上書き(false)するかを示します。

于 2012-09-06T06:08:03.850 に答える