写入同一文件;不要覆盖

时间:2012-09-06 05:52:13

标签: append threadpool fileoutputstream

这是我的代码段。

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;我将这个线程池传递给要完成的工作列表。现在每次调用一个线程时,它都会创建一个文件,其名称为线程名称,然后写入,但在循环中它只会覆盖该文件。

即使再次调用Thread,如何才能使其附加而不是覆盖,这种情况很可能发生,因为我的线程池工作列表很长。

注意:传递给ThreadPool的作业列表中的每个元素也是一个列表,这就是为什么在代码片段中有for循环的原因。

感谢。

1 个答案:

答案 0 :(得分:2)

  

但是在循环中它只是覆盖了文件。

是的 - 您正在循环中创建FileOutputStream 。如果在循环之前创建FileOutputStream(以及OutputStreamWriter,那么只需在循环中进行写入,它将为整个操作创建一个文件。 / p>

请注意,close调用应位于finally块中,因此即使代码抛出异常,您也会关闭编写器。

如果需要附加到该文件,如果再次调用此代码,只需更改此内容:

FileOutputStream fo = new FileOutputStream(file);

FileOutputStream fo = new FileOutputStream(file, true);

第二个参数,根据the documentation,说明是追加(true)还是覆盖(false)。