在什么情况下java.util.zip.ZipFile.close()会抛出IOException?它的方法签名表明它可以被抛出,但是从源代码中似乎没有任何可能发生这种情况的地方,除非它是在本机代码中。如果有异常,可以采取哪些纠正措施?
答案 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:
更多的事件可能是原因,但那些是我现在能想到的唯一两个。
答案 3 :(得分:0)
ZipFile.close()
的文档说:
关闭此ZIP文件将关闭先前由getInputStream方法的调用返回的所有输入流。
可能原生close
方法正在执行关闭InputStreams。
close
的{{1}}方法将InputStream
作为已检查的例外。
最可能的原因是在基础文件系统中写入zip文件错误的文件系统上的空间不足。除非您能够识别原因并在运行中解决问题,否则您只需向用户报告该情况。