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 finally 總結Java
- try/catch 的解釋與用法
- try ,catch
- Java語法糖: 使用 try-with-resources 語句安全地釋放資源Java
- Laravel try catchLaravel
- Java之異常處理try{}catch(){}Java
- Java中try()catch{}的使用方法Java
- Java之try-catch和throws的區別Java
- 【轉】java中異常與try catch finally詳解Java
- JavaScript try catch finally 語句JavaScript
- JavaScript try/catch/finally 語句JavaScript
- try-catch-finally的使用
- 自動釋放池
- Java 自動釋放鎖的幾種實現Java
- (十四).try-throw-catch機制
- js中try和catch的用法JS
- JAVA的異常處理機制(一)——try...catch...finallyJava
- JS 使用try catch捕獲異常JS
- [Java基礎]try-catch-finally 和 return 的執行順序Java
- try throw catch 語句檢測input值
- c++中的try-catch及throwC++
- NodeJS 實戰系列:如何設計 try catchNodeJS
- 重拾 ObjC 自動釋放池OBJ
- JavaScript 中 try...catch 的 10 個使用技巧JavaScript
- c#使用using關鍵字自動釋放資源不一定有好處C#
- Will it finally: 關於 try/catch 的一些細節
- 在 SQL Server 中使用 Try Catch 處理異常SQLServer
- Sqlserver Try Catch時Catch捕獲到錯誤則重試一次的寫法SQLServer
- try-catch-finally,被你忽略掉的執行順序
- 異常-try...catch的方式處理異常1
- 異常-try...catch的方式處理異常2
- 無需寫try/catch,也能正常處理異常
- PHP 的異常處理之try和catch用法小結PHP
- 關於php的try catch 使用的疑惑,希望高手指點PHP
- Win10怎麼一鍵釋放系統資源 win10一鍵釋放系統資源的步驟Win10
- jenkins自動釋出java程式碼JenkinsJava
- 有return的情況下try catch finally的執行順序