在Java編程中,一個經(jīng)典的問題是處理輸入輸出(input/output,I/O)錯誤。I/O錯誤包括兩種:I/O異常(IOException)和I/O錯誤(IOError)。雖然它們兩者都與讀取和寫入文件有關(guān),但是它們有著很大的區(qū)別。
IOException
try { // ... } catch (IOException e) { // 處理 I/O 異常 }
IOException是一個檢查性異常(checked exception),它在執(zhí)行輸入輸出操作期間可能拋出。當Java程序需要讀取/寫入文件或者訪問網(wǎng)絡(luò)資源時,它就需要處理可能拋出的IOException異常。也就是說,當Java的輸入輸出操作過程中出現(xiàn)問題時,IOException就會被拋出。
比如,在一個讀取文件的程序中,當文件不存在時,程序?qū)伋鯢ileNotFoundException異常。而FileNotFoundException是IOException的子類。其他常見的IOException異常包括SocketException、EOFException、ConnectException、MalformedURLException等。
IOError
try { // ... } catch (IOError e) { // 處理 I/O 錯誤 }
與IOException不同,IOError是一個錯誤(error)而非一個異常。Java中的錯誤一般不可恢復,需要重新啟動程序。IOError指的是在I/O(輸入輸出)系統(tǒng)中的錯誤,這種錯誤一般是由于底層操作系統(tǒng)或硬件故障導致的。在Java編程中,一旦發(fā)生IOError,程序?qū)⒉粫龠\行下去。
當Java程序運行過程中,如果出現(xiàn)了一些無法恢復的I/O系統(tǒng)錯誤,比如內(nèi)存溢出、Socket關(guān)閉等,它就會拋出IOError。IOError通常不需要我們在代碼中捕獲和處理,因為它是一種不可恢復的錯誤,我們只能夠在系統(tǒng)層面進行診斷和修復。