java.util.zip.ZipFile.close()什么时候抛出IOException?

时间:2010-05-04 15:02:20

标签: java zip ioexception

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

4 个答案:

答案 0 :(得分:7)

来自API docs on ZipFile.close()

  

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

并且InputStream.close()会引发IOException,因此ZipFile.close()也必须抛出它。根据{{​​3}},如果发生I / O错误,它会抛出IOException“。这不是很具描述性,但它正在广泛展示。 InputStreams可以表示来自文件系统,网络,内存等的流.InputStreams可能涉及需要刷新的缓冲区,需要关闭的套接字,需要释放的资源,需要释放的锁等等.IOExceptions可以发生的原因有很多。

答案 1 :(得分:1)

从男人关闭(2):

  

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

ZipFile.close()的文档说:

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

可能原生close方法正在执行关闭InputStreams。

close的{​​{1}}方法将InputStream作为已检查的例外。

最可能的原因是在基础文件系统中写入zip文件错误的文件系统上的空间不足。除非您能够识别原因并在运行中解决问题,否则您只需向用户报告该情况。