工具類(封裝拷貝,釋放資源)
阿新 • • 發佈:2018-12-18
package com.jianshun; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * 1:封裝拷貝, * 2:封裝釋放資源 * @author Administrator * */ public class FileUtils { public static void main(String[] args) { //檔案到檔案 try { InputStream is = new FileInputStream("abc.txt"); OutputStream os = new FileOutputStream("copy.txt"); copy(is,os); } catch (IOException e) { e.printStackTrace(); } //檔案到位元組資料 byte[] datas=null; try { InputStream is = new FileInputStream("abc.txt"); ByteArrayOutputStream os =new ByteArrayOutputStream(); copy(is,os); datas = os.toByteArray(); System.out.println(datas.length); } catch (IOException e) { e.printStackTrace(); } //位元組陣列到檔案 try { InputStream is = new ByteArrayInputStream(datas); OutputStream os = new FileOutputStream("copy.txt"); copy(is,os); } catch (FileNotFoundException e) { e.printStackTrace(); } } /** * 對接輸入流和輸出流 * @param in * @param out */ public static void copy(InputStream in,OutputStream out){ try { //3,操作,分段讀取 byte[] flush = new byte[1024]; int len = -1;//接收長度 while((len = in.read(flush)) != -1){ out.write(flush, 0, len);//分段寫出 } out.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ //4,釋放資源,分別關閉,先開啟的後關閉 close(in,out); } } /** * 釋放資源 * @param in * @param out */ public static void close(Closeable... ios){//使用可變引數 for(Closeable io : ios){ if(io != null){ try { io.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
package com.jianshun; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * 1:封裝拷貝, * 2:封裝釋放資源 * @author Administrator */ public class FileUtils2 { public static void main(String[] args) { //檔案到檔案 try { InputStream is = new FileInputStream("abc.txt"); OutputStream os = new FileOutputStream("copy.txt"); copy(is,os); } catch (IOException e) { e.printStackTrace(); } //檔案到位元組陣列 byte[] datas=null; try { InputStream is = new FileInputStream("abc.txt"); ByteArrayOutputStream os =new ByteArrayOutputStream(); copy(is,os); datas = os.toByteArray(); System.out.println(datas.length); } catch (IOException e) { e.printStackTrace(); } //位元組陣列到檔案 try { InputStream is = new ByteArrayInputStream(datas); OutputStream os = new FileOutputStream("copy.txt"); copy(is,os); } catch (FileNotFoundException e) { e.printStackTrace(); } } /** * 對接輸入流和輸出流 * @param in * @param out */ public static void copy(InputStream in,OutputStream out){ try { //3,操作,分段讀取 byte[] flush = new byte[1024]; int len = -1;//接收長度 while((len = in.read(flush)) != -1){ out.write(flush, 0, len);//分段寫出 } out.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ //4,釋放資源,分別關閉,先開啟的後關閉 close(in,out); } } /** * 使用1.7的try with resource釋放資源 * @param in * @param out */ public static void copy2(String srcPath,String destPath){ try( InputStream in = new FileInputStream(srcPath); OutputStream out = new FileOutputStream(destPath) ) { //3,操作,分段讀取 byte[] flush = new byte[1024]; int len = -1;//接收長度 while((len = in.read(flush)) != -1){ out.write(flush, 0, len);//分段寫出 } out.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 釋放資源 * @param in * @param out */ public static void close(Closeable... ios){//使用可變引數 for(Closeable io : ios){ if(io != null){ try { io.close(); } catch (IOException e) { e.printStackTrace(); } } } } }