1. 程式人生 > >工具類(封裝拷貝,釋放資源)

工具類(封裝拷貝,釋放資源)

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