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