java 从其他来源删除 BufferedWriter 文件

java BufferedWriter file deleted from other source

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

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. 打开文件并写入

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

另一个选项是锁定文件,但我不想那样做。 我不想避免删除文件:)

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

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

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