java try(){}catch(){}自動資源釋放
探索更簡單的關流方式
/**
* 關閉流測試
* 通過讀寫檔案進行測試
* @author Mr.Gao
*/
public class ExceptionCloseTest {
public static void main(String[] args) {
copy();
}
/**
* 使用緩衝流完成檔案的複製
*/
private static void copy() {
//1.建立緩衝流
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try{
//2.緩衝流的初始化
bis = new BufferedInputStream(new FileInputStream("D:\\a\\七月上.mp3"));
bos = new BufferedOutputStream(new FileOutputStream("D:\\a\\3.mp3"));
byte bytes[] = new byte[2048];
int len = 0;
//3.讀寫操作
while((len=bis.read(bytes))!=-1){
bos.write(bytes,0,len);
}
bos.flush();
}catch(Exception e){
e.getStackTrace();
}finally{
/**
* 關閉流的操作 最麻煩寫法
對流逐個判斷 如果流很多 要寫很多個判斷的方法
*/
if(bis!=null){
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(bos!=null){
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
上面關流的方式不是很友好 我們可以根據流的特性寫一個方法去關閉(改變在finally部分)
package com.fpy.exception;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.Closeable;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 關閉流測試 通過讀寫檔案進行測試
*
* @author Mr.Gao
*/
public class ExceptionCloseTest {
public static void main(String[] args) {
copy();
}
/**
* 使用緩衝流完成檔案的複製
*/
private static void copy() {
// 1.建立緩衝流
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
// 2.緩衝流的初始化
bis = new BufferedInputStream(new FileInputStream("D:\\a\\七月上.mp3"));
bos = new BufferedOutputStream(new FileOutputStream("D:\\a\\3.mp3"));
byte bytes[] = new byte[2048];
int len = 0;
// 3.讀寫操作
while ((len = bis.read(bytes)) != -1) {
bos.write(bytes, 0, len);
}
bos.flush();
} catch (Exception e) {
e.getStackTrace();
} finally {
//作為實參傳入close()自定義方法
close(bis);
close(bos);
}
}
/**
* 基本上所學的流都實現了Closeable 介面
* 所以可以使用多型的知識進行簡化操作
* @param clo 表面是Closeable型別 實際上傳入的流是誰那麼關閉的流就是誰
*/
private static void close(Closeable clo) {//多型
if (clo != null) {
try {
clo.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
看到這裡會發現 我們只需要一個方法即可完成關流的操作,那麼還有沒有更簡單的方法呢?我自己不想手動去關流,能不能自動關流呢?
答案是可以的(改變在去掉finally部分)
package com.fpy.exception;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.Closeable;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 關閉流測試 通過讀寫檔案進行測試
*
* @author Mr.Gao
*/
public class ExceptionCloseTest {
public static void main(String[] args) {
copy();
}
/**
* 使用緩衝流完成檔案的複製
*/
private static void copy() {
// 1.建立緩衝流
/**
* 使用java7的新特性 try(流的宣告){
* 業務操作
* }catch(){};
* 不用再寫關流的操作,內部自動完成資源的釋放
*
* 注意:沒有 七月上1.mp3 資源
*/
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\a\\七月上1.mp3"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\a\\3.mp3"));) {
byte bytes[] = new byte[2048];
int len = 0;
// 3.讀寫操作
while ((len = bis.read(bytes)) != -1) {
bos.write(bytes, 0, len);
}
bos.flush();
System.out.println("Suucess");
} catch (FileNotFoundException e) {
//e.printStackTrace();
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
執行效果:
相關文章
- IDEA 自動生成try,catch快捷鍵Idea
- Java try catch finallyJava
- 自動釋放系統資源(轉載)
- Java try catch finally 總結Java
- java中try catch塊的使用Java
- Java語法糖: 使用 try-with-resources 語句安全地釋放資源Java
- Laravel try catchLaravel
- js try catchJS
- Java之異常處理try{}catch(){}Java
- Java中try()catch{}的使用方法Java
- iOS的@try、@catch()iOS
- Java之try-catch和throws的區別Java
- c++ try catch 問題C++
- Java 自動釋放鎖的幾種實現Java
- 【轉】java中異常與try catch finally詳解Java
- Java中的try、catch、finally塊簡單的解析Java
- (十四).try-throw-catch機制
- JavaScript try catch finally 語句JavaScript
- js中try和catch的用法JS
- JavaScript錯誤_throw、try和catchJavaScript
- JavaScript try/catch/finally 語句JavaScript
- 微軟:請不要使用 Try/Catch微軟
- 【C#之Try……Catch例項】C#
- Java含有return 的try catch finally的執行順序Java
- 關於java執行緒釋放資源問題Java執行緒
- JS 使用try catch捕獲異常JS
- JAVA的異常處理機制(一)——try...catch...finallyJava
- 重拾 ObjC 自動釋放池OBJ
- try throw catch 語句檢測input值
- c++中的try-catch及throwC++
- 關於Java中try-catch-finally-return的執行順序Java
- [CareerCup] 14.2 Try-catch-finally Java中的異常處理Java
- [Java基礎]try-catch-finally 和 return 的執行順序Java
- FireFox記憶體自動釋放Firefox記憶體
- JavaScript 中 try...catch 的 10 個使用技巧JavaScript
- NodeJS 實戰系列:如何設計 try catchNodeJS
- Nodejs try catch捕捉異常失效場景NodeJS
- SQL SERVER 裡的錯誤處理(try catch)SQLServer