从其他来源

时间:2015-04-23 07:30:43

标签: java file bufferedwriter

我写了一小段代码,可以概括为

Thread() {
 run() {
  BufferedWriter fileout = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(log, true), "UTF-8"));;
  while (true) {
    fileout.write(blockingQueue.take());
  }
 }
}

现在,其他一些线程会产生行并将它们添加到blockingQueue。 现在,如果我从控制台中删除文件,fileout.write不会失败也不会抛出异常。

我想知道如果有人从中移除文件我怎么能重新打开文件 文件系统来自控制台的rm logfile.txt。

问题不在于如何重新打开它,而是如何检测文件已被删除。

有些选择 1.do take()并将其保存为字符串 2.打开文件并写入

但即使我以这种方式更改代码,它也不能保证 文件在有人删除之前写完。

另一种选择是锁定文件,但我不想这样做。 我不想避免删除文件:)

1 个答案:

答案 0 :(得分:0)

如果您要写入的文件可能会消失,那么最好的选择是不要保持流打开,而是在需要编写内容时重新创建一个新的FileOutputStream。这也将重新创建文件(我想这就是你想要的)。

或者您可以在每次写入之前检查文件是否存在。我认为两种方法在性能方面大致相同。

如果性能有问题,你可以在内存中缓冲,当缓冲区已满时,打开FileOutputStream(并在写出缓冲区后立即再次关闭它)。