2010-05-04 86 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

相關問題