FileOutputStream write在文件被删除时不会引发异常?

时间:2012-04-23 22:28:37

标签: android file-io

我使用FileOutputStream fos在一个单独的线程中创建/追加并写入调试文件:

   fos = new FileOutputStream(outputFile, true);
    if (!outputFile.exists()) {
    outputFile.createNewFile();
    }
    fos.write(string.getBytes());

此代码在循环中调用,而用户可能会清除=从另一个线程中随时删除文件以重新开始记录调试输出。

现在我真的很惊讶,当文件被删除时,这段代码会运行而不会引发任何异常,但没有任何反应。即文件没有重新创建,也没有任何书面文件。所有的“写作”都丢失了。

我是否真的必须在每次调用fos.write之前一直手动检查文件是否已被同时删除?

如果异常会像预期的那样起作用,即在写入已删除的文件时,它会更简单,更清晰。

1 个答案:

答案 0 :(得分:4)

这完全取决于操作系统。在Windows上,您不会能够删除该文件;但在类UNIX系统上,这就是它的工作原理,与编程语言无关。鉴于文件可以有多个可以独立删除的链接,您应该理解为什么这种行为有意义。事实上,它会导致比删除文件时爆炸更容易和更清晰的行为。