java.util.zip.ZipFile.close()在什么情况下会抛出 IOException?它的方法签名表明它可以被抛出,但从源代码来看,似乎没有任何地方可能发生这种情况,除非它是在本机代码中。在捕获该异常时可以采取哪些纠正措施(如果有)?
4 回答
关闭此 ZIP 文件将关闭之前调用该
getInputStream
方法返回的所有输入流。
并InputStream.close()
抛出一个IOException
,所以ZipFile.close()
也必须抛出它。根据API 文档InputStream.close()
,它会抛出IOException
“如果发生 I/O 错误”。这不是很具有描述性,但它正在撒网。InputStreams 可以表示来自文件系统、网络、内存等的流。InputStreams 可以涉及需要刷新的缓冲区、需要关闭的套接字、需要释放的资源、需要释放的锁等。IOExceptions 可以由于各种原因而发生。
从人关闭(2):
不检查 close() 的返回值是一个常见但严重的编程错误。上一次 write(2) 操作的错误很有可能在最后的 close() 中首先报告。关闭文件时不检查返回值可能会导致数据无声丢失。这在 NFS 和磁盘配额中尤其明显。
我不确定,但我认为当以下事件之一发生时会引发 IOException:
- 该 zip 文件已被应用程序之外的某事/某人删除。
- 卸载/断开包含 zip 文件的驱动器时
原因可能是更多事件,但这是我现在唯一能想到的两个。
的文档ZipFile.close()
说:
关闭此 ZIP 文件将关闭之前调用 getInputStream 方法返回的所有输入流。
大概本机close
方法正在执行关闭 InputStreams。
has的close
方法作为已检查的异常。InputStream
IOException
最可能的原因是在底层文件系统中写入 zip 文件的文件系统空间不足。除非您可以确定原因并即时解决它,否则您所能做的就是向用户报告情况。