【发布时间】:2011-09-20 23:35:08
【问题描述】:
我们的java程序不断地把一些重要的数据写入一个文件。现在我们想在某个用户手动删除文件(java程序正在写入的文件)时在控制台上抛出一些异常或显示某种错误消息。
我发现java在尝试写入已删除的文件时不会抛出任何异常。
方法 I - 启动一个新线程,该线程将继续检查文件是否存在,并在文件被删除时通知主 java 程序。这在我们的例子中是行不通的,因为我们将有几个文件供 java 程序写入,因此为每个文件启动一个新线程不会节省内存。
方法 II - 每次写入文件前检查文件是否存在。这也不是一个好方法,因为检查文件是否存在是一项成本更高的操作。
方法 III - 扩展 java.io.FilterWriter(我们用于写入文件)并覆盖 write() 方法每当它尝试写入已删除的文件时抛出异常。这似乎是一个很好的解决方案,但我找不到任何地方 Java 正在消化一些异常(当它试图写入已被删除的文件时),我们可以通过覆盖该方法来抛出这些异常。
【问题讨论】:
-
这是 Windows 还是 Unix?您是在每次写入后关闭文件,还是在运行的整个过程中保持打开状态?
-
@Gabe 这是 Unix。在 Windows 中,如果某个文件正在被某个进程使用,则无法删除该文件。
-
在 Unix 中,无法知道您打开的文件已被删除,因此 Java(或任何其他语言)在发生这种情况时无法抛出异常。
-
也许将数据写入数据库更好?
标签: java io filewriter writer