2010-06-15 177 views

回答

2

不检查close()的返回值是一个常见但严重的编程错误。先前的写入(2)操作中的错误很可能会在最后的close()中首先报告。关闭文件时不检查返回值可能会导致数据无提示丢失。这尤其可以通过NFS和磁盘配额来观察。

尽管关闭只读流不能扔,Java的IO架构无法检查,由于其静态检查读与写没有流

+1

'close()'没有任何“返回值”被检查,它被声明返回'void'(用Java)!你的意思是“不处理任何(IO)异常? – 2010-06-15 11:23:18

2

你应该做的真的取决于你的应用程序。例如,如果它是一个GUI应用程序并且用户试图保存文件,那么您可能想要通知用户并让她有机会将该文件保存到别处。有时,在向用户报告错误之前再次尝试执行操作也是有意义的。否则,请报告错误,并根据是否有意义继续执行或中止程序。

0

This SO question讨论了close()可能会引发异常的情况。其实,其中有不少。

一般来说,解决问题的方法不多。但是,您可能需要采取一些恢复措施。例如:

  • 如果你正在写一个关键文件,并失败了,那么你的应用程序应该采取步骤,以确保它不会与新副本揍文件的“好”的副本close()它正在写入的文件。

  • 如果你正在写的请求或者使用网络套接字的反应,也许你应该注意的是,请求/响应可能尚未发送,这样就可以重新发送它的连接已经重新建立了。

当然,报告/记录“失败”也是一个好主意。