IO工具类(封装拷贝,释放资源)

版权声明: https://blog.csdn.net/weixin_40072979/article/details/83539978

当学完工具类,对一些很多第三方封装的IO工具类就很清楚了 

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

猜你喜欢

转载自blog.csdn.net/weixin_40072979/article/details/83539978