你有没有见过 Java File close() 引发异常?

2022-09-02 00:44:43

有没有人见过在任何可关闭对象上调用 close 方法时引发的异常?


答案 1

如果最终失败,将抛出 an。可能的原因包括:IOExceptioncloseflush

  • 文件系统已满,或者用户超出配额,
  • 硬盘错误,
  • 文件系统被强行卸载,
  • 远程文件系统由于网络或其他问题而不可用,
  • (可能)如果通过或类似方式写入文件,则会出现字符编码错误,OutputStreamWriter
  • 如果“文件”是设备文件,则设备错误,
  • 如果可关闭对象是网络流,则连接丢失,
  • 如果可关闭的管道是通往外部过程的管道,则为破损的管道,
  • 等等。

我当然见过其中一些。其他人不太可能。

但是,如果您正在写入的数据很重要,那么您应该允许失败。例如,如果应用程序正在写出文件系统填满的关键文件,则应用程序最好在用截断的版本替换文件的旧副本之前注意这一点。close


答案 2

是的,这并不罕见,恕我直言,如果您正在使用非本地磁盘文件以外的任何内容。

Close() 如果此时您的可闭合器仍然有效且处于打开状态,则关闭() 有效。管道,远程文件等许多东西都可能过早死亡。

此外,我还看到过在打开和写入时忽略错误的代码,并且仍然尝试关闭(例如,在最终块中)。