生活随笔
收集整理的這篇文章主要介紹了
IO异常的处理
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在jdk1.7之前使用try catch finally 處理流中的異常
? ? 格式:
? ? ? ? try{
? ? ? ? ? ? 可能會(huì)產(chǎn)出異常的代碼
? ? ? ? }catch(異常類變量 變量名){
? ? ? ? ? ? 異常的處理邏輯
? ? ? ? }finally{
? ? ? ? ? ? 一定會(huì)指定的代碼
? ? ? ? ? ? 資源釋放
? ? ? ? }
package com.itheima.demo06.trycatch;import java.io.FileWriter;
import java.io.IOException;public class Demo01TryCatch {public static void main(String[] args) {//提高變量fw的作用域,讓finally可以使用//變量在定義的時(shí)候,可以沒(méi)有值,但是使用的時(shí)候必須有值//fw = new FileWriter("09_IOAndProperties\\g.txt",true); 執(zhí)行失敗,fw沒(méi)有值,fw.close會(huì)報(bào)錯(cuò)FileWriter fw = null;try{//可能會(huì)產(chǎn)出異常的代碼fw = new FileWriter("w:\\09_IOAndProperties\\g.txt",true);for (int i = 0; i <10 ; i++) {fw.write("HelloWorld"+i+"\r\n");}}catch(IOException e){//異常的處理邏輯System.out.println(e);}finally {//一定會(huì)指定的代碼//創(chuàng)建對(duì)象失敗了,fw的默認(rèn)值就是null,null是不能調(diào)用方法的,會(huì)拋出NullPointerException,需要增加一個(gè)判斷,不是null在把資源釋放if(fw!=null){try {//fw.close方法聲明拋出了IOException異常對(duì)象,所以我們就的處理這個(gè)異常對(duì)象,要么 throws ,要么 try catchfw.close();} catch (IOException e) {e.printStackTrace();}}}}
}
創(chuàng)建對(duì)象失敗了,fw的默認(rèn)值就是null,null是不能調(diào)用方法的,會(huì)拋出NullPointerException,需要增加一個(gè)判斷,不是null在把資源釋放?
fw.close方法聲明拋出了IOException異常對(duì)象,所以我們就的處理這個(gè)異常對(duì)象,要么 throws ,要么 try catch
JDK7的新特性
? ? 在try的后邊可以增加一個(gè)(),在括號(hào)中可以定義流對(duì)象
? ? 那么這個(gè)流對(duì)象的作用域就在try中有效
? ? try中的代碼執(zhí)行完畢,會(huì)自動(dòng)把流對(duì)象釋放,不用寫finally
? ? 格式:
? ? ? ? try(定義流對(duì)象;定義流對(duì)象....){
? ? ? ? ? ? 可能會(huì)產(chǎn)出異常的代碼
? ? ? ? }catch(異常類變量 變量名){
? ? ? ? ? ? 異常的處理邏輯
? ? ? ? }
package com.itheima.demo06.trycatch;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class Demo02JDK7 {public static void main(String[] args) {try(//1.創(chuàng)建一個(gè)字節(jié)輸入流對(duì)象,構(gòu)造方法中綁定要讀取的數(shù)據(jù)源FileInputStream fis = new FileInputStream("c:\\1.jpg");//2.創(chuàng)建一個(gè)字節(jié)輸出流對(duì)象,構(gòu)造方法中綁定要寫入的目的地FileOutputStream fos = new FileOutputStream("d:\\1.jpg");){//可能會(huì)產(chǎn)出異常的代碼//一次讀取一個(gè)字節(jié)寫入一個(gè)字節(jié)的方式//3.使用字節(jié)輸入流對(duì)象中的方法read讀取文件int len = 0;while((len = fis.read())!=-1){//4.使用字節(jié)輸出流中的方法write,把讀取到的字節(jié)寫入到目的地的文件中fos.write(len);}}catch (IOException e){//異常的處理邏輯System.out.println(e);}}
}
JDK9新特性
? ? try的前邊可以定義流對(duì)象
? ? 在try后邊的()中可以直接引入流對(duì)象的名稱(變量名)
? ? 在try代碼執(zhí)行完畢之后,流對(duì)象也可以釋放掉,不用寫finally
? ? 格式:
? ? ? ? A a = new A();
? ? ? ? B b = new B();
? ? ? ? try(a,b){
? ? ? ? ? ? 可能會(huì)產(chǎn)出異常的代碼
? ? ? ? }catch(異常類變量 變量名){
? ? ? ? ? ? 異常的處理邏輯
? ? ? ? }
package com.itheima.demo06.trycatch;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class Demo03JDK9 {public static void main(String[] args) throws IOException {//1.創(chuàng)建一個(gè)字節(jié)輸入流對(duì)象,構(gòu)造方法中綁定要讀取的數(shù)據(jù)源FileInputStream fis = new FileInputStream("c:\\1.jpg");//2.創(chuàng)建一個(gè)字節(jié)輸出流對(duì)象,構(gòu)造方法中綁定要寫入的目的地FileOutputStream fos = new FileOutputStream("d:\\1.jpg");try(fis;fos){//一次讀取一個(gè)字節(jié)寫入一個(gè)字節(jié)的方式//3.使用字節(jié)輸入流對(duì)象中的方法read讀取文件int len = 0;while((len = fis.read())!=-1){//4.使用字節(jié)輸出流中的方法write,把讀取到的字節(jié)寫入到目的地的文件中fos.write(len);}}catch (IOException e){System.out.println(e);}}
}
?
總結(jié)
以上是生活随笔為你收集整理的IO异常的处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。