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(并在写出缓冲区后立即再次关闭它)。
我写了一小段代码可以概括为
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(并在写出缓冲区后立即再次关闭它)。