2012-11-04 194 views
19

java.io.IOException似乎是最常見的異常類型,巧合的是,它似乎也是最含糊不清的。無論何時使用套接字,文件,& c,我都會看到throws IOException。然而,我從來沒有真正對我開過一槍,所以我想知道那是什麼原因會引發異常。該文檔對解釋發生的事情沒有多大幫助:Java - 拋出IOException異常

表示發生某種I/O異常。該類是由失敗或中斷的I/O操作產生的常規異常類。

有人可以請解釋一些IOException將被拋出的實例,或者它應該如何使用。

+3

'IOException'就是這樣一個輸入或輸出異常。當人們使用它們時,它們通常只是概括更具體的錯誤。 [API](http://docs.oracle.com/javase/6/docs/api/java/io/IOException.html)列出了內置於Java SE 6中的所有不同類型的IO異常。 – Jon

+0

我知道什麼是IOException,我只是想要一些能夠更全面地描述它們何時發生的場景。 – Zaq

回答

36

假設你:

  1. 讀一個網絡文件和斷開了。
  2. 讀取不再可用的本地文件。
  3. 使用一些流來讀取數據和其他一些進程關閉了流。
  4. 試圖讀取/寫入文件,但沒有權限。
  5. 嘗試寫入文件但磁盤空間不再可用。

還有更多的例子,但這些是最常見的,以我的經驗。

5

通常,I/O表示輸入或輸出。只要輸入或輸出操作失敗或解釋,這些方法就會拋出IOException。請注意,這不會因讀取或寫入內存而拋出,因爲Java將自動處理它。

這裏有一些導致IOException的情況。

  • 從一個封閉的InputStream讀
  • 嘗試訪問網絡上的文件不淨連接
2

Java文檔有助於瞭解特定IOException

纔有根本原因看文檔頁面IOExceptiondirect known sub-interfaces

ChangedCharSetException, CharacterCodingException, CharConversionException, ClosedChannelException, EOFException, FileLockInterruptionException, FileNotFoundException, FilerException, FileSystemException, HttpRetryException, IIOException, InterruptedByTimeoutException, InterruptedIOException, InvalidPropertiesFormatException, JMXProviderException, JMXServerErrorException, MalformedURLException, ObjectStreamException, ProtocolException, RemoteException, SaslException, SocketException, SSLException, SyncFailedException, UnknownHostException, UnknownServiceException, UnsupportedDataTypeException, UnsupportedEncodingException, UserPrincipalNotFoundException, UTFDataFormatException, ZipException

這些例外中的大多數都是不言自明的。

很少IOExceptions與根源:

EOFException:該文件或流的端部的端部已被輸入過程中意外到達信號。該異常主要由數據輸入流用於信號流結束

SocketException:拋出以指示創建或訪問套接字時發生錯誤。

RemoteException:RemoteException是在執行遠程方法調用期間可能發生的一些通信相關異常的公共超類。遠程接口的每個方法(擴展了java.rmi.Remote的接口)必須在其throws子句中列出RemoteException。

UnknownHostException:拋出以指示無法確定主機的IP地址。 (您可能無法連接到互聯網)

MalformedURLException:拋出以表明發生了格式錯誤的URL。在規範字符串中找不到合法協議,或者無法解析字符串。