2010-05-04 88 views

回答

7

API docs on ZipFile.close()

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

而且InputStream.close()抛出IOException,所以ZipFile.close()已经把它扔了。根据API docs for InputStream.close(),它会抛出一个IOException“如果发生I/O错误”。这不是很具描述性,但它正在建立一个广泛的网络。 InputStreams可以表示来自文件系统,网络,内存等的流。InputStreams可能涉及需要刷新的缓冲区,需要关闭的套接字,需要释放的资源,需要释放的锁等。IOExceptions可以发生各种原因。

+0

如果读取()或写入()调用引发异常,我可以理解读取或写入失败。但是,如果在close()上引发异常,那么失败了? – 2010-05-04 17:51:48

1

从人接近(2):

不检查关闭的返回值()是一种常见但仍然严重的编程错误。先前的写入(2)操作中的错误很可能会在最后的close()中首先报告。关闭文件时不检查返回值可能会导致数据无提示丢失。这尤其可以通过NFS和磁盘配额来观察。

+2

虽然关闭readonly流不能抛出,Java的IO框架无法检查,因为它没有静态检查读取与写入流。 – Joshua 2010-05-04 15:11:23

0

我不知道,但我想抛出IOException当发生下列事件之一发生:

  • zip文件被什么/某人在应用程序之外删除。
  • 当包含的zip文件的驱动器被卸载/断开

很多更多的事件可能是原因,但这些是仅有的两个,现在我能想到的。

+0

但是,为什么这些情况会导致关闭只读ZipFile的错误? – EJP 2010-05-05 01:02:38

+0

我没有提到这些是抛出异常的唯一条件。 – 2010-05-05 05:24:35

0

ZipFile.close()文档说:

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

推测原生close方法正在执行关闭InputStreams。

close方法InputStream已将IOException作为检查异常。

最有可能的原因是正在写入zip文件的文件系统上的 空间不足条件 底层文件系统中存在错误。除非您能够即时确定原因并加以解决,否则您只能向用户报告情况。

+0

当使用'InputStream'时,你*读*,而不*写*,因此在讨论的情况下,由于正在写入zip文件而导致磁盘空间不足导致“IOException” 。 – Asaph 2010-05-04 15:22:14

+0

谢谢,更正。 – 2010-05-04 17:14:25

相关问题