【发布时间】:2015-04-23 07:30:43
【问题描述】:
我写了一小段代码,可以概括为
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. 打开文件并写入文件
但即使我以这种方式更改代码,也不能保证 该文件在有人删除它之前被写入。
另一种选择是锁定文件,但我不想这样做。 我不想避免删除文件:)
【问题讨论】:
-
如果您在 Unix 系统上,您的代码将通过某种句柄来处理文件。其他人删除该文件将从目录中删除该条目,但它不会删除您的程序通过打开流保存的引用。当您关闭将其内容刷新到文件中并释放句柄的流时。然后该文件将消失,因为没有引用仍然存在。我能看到写入新文件的唯一方法是每次关闭它并重新打开它。
标签: java file bufferedwriter