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

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

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

谢谢。

4

1 回答 1

2

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

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

请注意,close调用应该在一个finally块中,因此即使代码抛出异常,您也可以关闭编写器。

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

FileOutputStream fo = new FileOutputStream(file);

FileOutputStream fo = new FileOutputStream(file, true);

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

于 2012-09-06T06:08:03.850 回答