日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java IO: 异常处理

發(fā)布時間:2023/12/3 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java IO: 异常处理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載自? ?Java IO: 異常處理

譯文鏈接?作者:Jakob Jenkov 譯者: 李璟(jlee381344197@gmail.com)

流與Reader和Writer在結(jié)束使用的時候,需要正確地關(guān)閉它們。通過調(diào)用close()方法可以達(dá)到這一點。不過這需要一些思考。請看下邊的代碼:

InputStream input = new FileInputStream("c:\\data\\input-text.txt"); int data = input.read(); while(data != -1) {//do something with data... doSomethingWithData(data);data = input.read(); } input.close();

第一眼看這段代碼時,可能覺得沒什么問題??墒侨绻谡{(diào)用doSomethingWithData()方法時出現(xiàn)了異常,會發(fā)生什么呢?沒錯,這個InputStream對象就不會被關(guān)閉。

為了避免異常造成流無法被關(guān)閉,我們可以把代碼重寫成這樣:

InputStream input = null; try{input = new FileInputStream("c:\\data\\input-text.txt");int data = input.read();while(data != -1) {//do something with data...doSomethingWithData(data);data = input.read();} }catch(IOException e){//do something with e... log, perhaps rethrow etc. } finally {if(input != null)input.close(); }

注意到這里把InputStream的關(guān)閉代碼放到了finally塊中,無論在try-catch塊中發(fā)生了什么,finally內(nèi)的代碼始終會被執(zhí)行,所以這個InputStream總是會被關(guān)閉。

但是如果close()方法拋出了異常,告訴你流已經(jīng)被關(guān)閉過了呢?為了解決這個難題,你也需要把close()方法寫在try-catch內(nèi)部,就像這樣:

} finally {try{if(input != null)input.close();} catch(IOException e){//do something, or ignore.} }

這段解決了InputStream(或者OutputStream)流關(guān)閉的問題的代碼,確實是有一些不優(yōu)雅,盡管能夠正確處理異常。如果你的代碼中重復(fù)地遍布了這段丑陋的異常處理代碼,這不是很好的一個解決方案。如果一個匆忙的家伙貪圖方便忽略了異常處理呢?

此外,想象一下某個異常最先從doSomethingWithData方法內(nèi)拋出。第一個catch會捕獲到異常,然后在finally里程序會嘗試關(guān)閉InputStream。但是如果還有異常從close()方法內(nèi)拋出呢?這兩個異常中得哪個異常應(yīng)當(dāng)往調(diào)用棧上傳播呢?

幸運的是,有一個辦法能夠解決這個問題。這個解決方案稱作“異常處理模板”。創(chuàng)建一個正確關(guān)閉流的模板,能夠在代碼中做到一次編寫,重復(fù)使用,既優(yōu)雅又簡單。詳情參見Java異常處理模板。

Java7中IO的異常處理

從Java7開始,一種新的被稱作“try-with-resource”的異常處理機(jī)制被引入進(jìn)來。這種機(jī)制旨在解決針對InputStream和OutputStream這類在使用完畢之后需要關(guān)閉的資源的異常處理??梢詾g覽Try with Resource in Java 7獲得更多信息。


總結(jié)

以上是生活随笔為你收集整理的Java IO: 异常处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。