我使用FileOutputStream fos
在一个单独的线程中创建/追加并写入调试文件:
fos = new FileOutputStream(outputFile, true);
if (!outputFile.exists()) {
outputFile.createNewFile();
}
fos.write(string.getBytes());
此代码在循环中调用,而用户可能会清除=从另一个线程中随时删除文件以重新开始记录调试输出。
现在我真的很惊讶,当文件被删除时,这段代码会运行而不会引发任何异常,但没有任何反应。即文件没有重新创建,也没有任何书面文件。所有的“写作”都丢失了。
我是否真的必须在每次调用fos.write
之前一直手动检查文件是否已被同时删除?
如果异常会像预期的那样起作用,即在写入已删除的文件时,它会更简单,更清晰。
答案 0 :(得分:4)
这完全取决于操作系统。在Windows上,您不会能够删除该文件;但在类UNIX系统上,这就是它的工作原理,与编程语言无关。鉴于文件可以有多个可以独立删除的链接,您应该理解为什么这种行为有意义。事实上,它会导致比删除文件时爆炸更容易和更清晰的行为。