版权声明: 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();
}
}
}
}
}