6

java.util.zip.ZipFile.close()在什么情况下会抛出 IOException?它的方法签名表明它可以被抛出,但从源代码来看,似乎没有任何地方可能发生这种情况,除非它是在本机代码中。在捕获该异常时可以采取哪些纠正措施(如果有)?

4

4 回答 4

7

来自API 文档ZipFile.close()

关闭此 ZIP 文件将关闭之前调用该getInputStream方法返回的所有输入流。

InputStream.close()抛出一个IOException,所以ZipFile.close()也必须抛出它。根据API 文档InputStream.close(),它会抛出IOException“如果发生 I/O 错误”。这不是很具有描述性,但它正在撒网。InputStreams 可以表示来自文件系统、网络、内存等的流。InputStreams 可以涉及需要刷新的缓冲区、需要关闭的套接字、需要释放的资源、需要释放的锁等。IOExceptions 可以由于各种原因而发生。

于 2010-05-04T15:13:29.587 回答
1

从人关闭(2):

不检查 close() 的返回值是一个常见但严重的编程错误。上一次 write(2) 操作的错误很有可能在最后的 close() 中首先报告。关闭文件时不检查返回值可能会导致数据无声丢失。这在 NFS 和磁盘配额中尤其明显。

于 2010-05-04T15:05:40.320 回答
0

我不确定,但我认为当以下事件之一发生时会引发 IOException:

  • 该 zip 文件已被应用程序之外的某事/某人删除。
  • 卸载/断开包含 zip 文件的驱动器时

原因可能是更多事件,但这是我现在唯一能想到的两个。

于 2010-05-04T15:13:14.097 回答
0

的文档ZipFile.close()说:

关闭此 ZIP 文件将关闭之前调用 getInputStream 方法返回的所有输入流。

大概本机close方法正在执行关闭 InputStreams。

has的close方法作为已检查的异常。InputStreamIOException

最可能的原因是在底层文件系统中写入 zip 文件的文件系统空间不足。除非您可以确定原因并即时解决它,否则您所能做的就是向用户报告情况。

于 2010-05-04T15:17:21.703 回答