1

我用来FileOutputStream fos在单独的线程中创建/追加和写入调试文件:

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

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

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

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

如果异常会像预期的那样工作,即写入已删除的文件时,它会更容易和更清晰。

4

1 回答 1

4

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

于 2012-04-23T22:30:53.833 回答