在什么情况下java.util.zip.ZipFile.close()会抛出IOException?它的方法签名表明它可以被引发,但是从源代码看来,除非是本地代码,否则似乎没有任何可能发生的地方。在发现异常的地方可以采取哪些纠正措施(如果有的话)?什么时候java.util.zip.ZipFile.close()抛出IOException?
回答
关闭此ZIP文件将关闭所有的输入流先前由
getInputStream
方法的调用返回。
而且InputStream.close()
抛出IOException
,所以ZipFile.close()
已经把它扔了。根据API docs for InputStream.close()
,它会抛出一个IOException
“如果发生I/O错误”。这不是很具描述性,但它正在建立一个广泛的网络。 InputStreams可以表示来自文件系统,网络,内存等的流。InputStreams可能涉及需要刷新的缓冲区,需要关闭的套接字,需要释放的资源,需要释放的锁等。IOExceptions可以发生各种原因。
从人接近(2):
不检查关闭的返回值()是一种常见但仍然严重的编程错误。先前的写入(2)操作中的错误很可能会在最后的close()中首先报告。关闭文件时不检查返回值可能会导致数据无提示丢失。这尤其可以通过NFS和磁盘配额来观察。
虽然关闭readonly流不能抛出,Java的IO框架无法检查,因为它没有静态检查读取与写入流。 – Joshua 2010-05-04 15:11:23
我不知道,但我想抛出IOException当发生下列事件之一发生:
- zip文件被什么/某人在应用程序之外删除。
- 当包含的zip文件的驱动器被卸载/断开
很多更多的事件可能是原因,但这些是仅有的两个,现在我能想到的。
但是,为什么这些情况会导致关闭只读ZipFile的错误? – EJP 2010-05-05 01:02:38
我没有提到这些是抛出异常的唯一条件。 – 2010-05-05 05:24:35
为ZipFile.close()
文档说:
关闭此ZIP文件将关闭所有的输入流先前由调用getInputStream方法返回。
推测原生close
方法正在执行关闭InputStreams。
close
方法InputStream
已将IOException
作为检查异常。
最有可能的原因是正在写入zip文件的文件系统上的
空间不足条件
底层文件系统中存在错误。除非您能够即时确定原因并加以解决,否则您只能向用户报告情况。
当使用'InputStream'时,你*读*,而不*写*,因此在讨论的情况下,由于正在写入zip文件而导致磁盘空间不足导致“IOException” 。 – Asaph 2010-05-04 15:22:14
谢谢,更正。 – 2010-05-04 17:14:25
- 1. 什么时候XPathExpression.evaluate抛出?
- 2. 为什么HttpURLConnection.getResponseCode()抛出IOException?
- 3. 为什么ByteArrayOutputStream.close()抛出IOException?
- 4. 什么时候应该抛出异常?
- 5. 什么时候抛出java异常
- 6. 什么时候StackOverflowError被抛出?
- 7. ServerSocket.close()。它什么时候抛出异常?
- 8. 混淆什么时候抛出异常
- 9. 什么时候org.hibernate.Session抛出HibernateException?
- 10. File.Replace抛出IOException
- 11. Application.GetResourceStream抛出IOException
- 12. 什么时候Java Collections在使用Collections.addAll()时抛出NullPointerException异常
- 13. 如果抛出IOException,我该怎么办?
- 14. Java使用Process#start()时,抛出IOException
- 15. 什么时候ArrayList.Itr#next()在这一行上抛出ConcurrentModificationException?
- 16. 什么时候字典在Add或ContainsKey上抛出IndexOutOfRangeException?
- 17. 如何知道什么时候抛出异常
- 18. 什么时候boost :: asio :: ip :: address :: from_string(remoteHost)抛出异常
- 19. 什么时候你会在PHP中抛出一个DomainException?
- 20. 什么时候可以锁定(syncObject)抛出异常?
- 21. 什么时候休眠Session.load()抛出一个异常
- 22. 究竟是什么时候JVM抛出OutOfMemoryError
- 23. Memcache get方法抛出IOException
- 24. System.IO.File.Copy抛出IOException异常
- 25. InputStreamReader中抛出IOException异常
- 26. HttpURLConnection POST请求抛出IOException
- 27. RegistryKey.GetSubKeyNames抛出IOException异常
- 28. 为什么在此代码中永远不会抛出IOException
- 29. 为什么Scanner使用Scanner#ioException()而不是抛出异常?
- 30. 什么时候一个Socket接收返回0字节,什么时候会抛出一个SocktException?
如果读取()或写入()调用引发异常,我可以理解读取或写入失败。但是,如果在close()上引发异常,那么失败了? – 2010-05-04 17:51:48