在什麼情況下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