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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java ioexception异常_12. Java IO: 异常处理

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

想要查看此教程的目錄請點擊:Java IO教程目錄貼地址

Streams或Readers/Writers在使用過程中需要是可關閉的。這需要調用close()方法。這需要一點兒思考,看下面的代碼:

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();

這段代碼看起來很好。但是如果doSomethingWithData()方法拋出異常會發生什么?對的!如果發生異常InputStream就不會被關閉了!

下面的代碼避免了這樣的問題:

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是怎么樣在finally下關閉的。不管在try代碼塊中發生了什么,finally中的代碼都會被執行。所以InputStream總是會被關閉。

但是close()方法如果拋出異常會發生什么?是說stream已經被關閉了?好吧,你可能要用try-catch去catch住這個異常,像下面這樣:

} finally {

try{

if(input != null) input.close();

} catch(IOException e){

//do something, or ignore.

}

}

這樣嵌套的去處理問題,看起來非常丑陋,盡管解決了問題。這樣不優雅的異常處理代碼并不夠好,他可以在你的代碼中重復的傳播。如果寫代碼時候比較匆忙,忘記異常處理該怎么辦?

想象一下如果從doSomethingWithData()拋出一個異常,第一個catch捕捉到那個異常,InputStream在finally關閉。但是,如果從input.close()方法拋出一個異常會發生什么?兩個異常中的哪一個應該被傳播到調用堆棧?

Java 7中Java IO 的異常處理

Java7開始有一個新的異常處理機制叫做“try with resources”,它是一個語法糖。這個異常處理機制特別的地方在于你使用資源時需要在使用后關閉,那么用它可以解決這個問題,例如使用InputStream,OutputStream時等等。想要學習和它更多相關的內容可以去Try With Resources in Java 7

.

.

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。