package io02;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
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
*/
public class FileUtils2 {
public static void main(String[] args) {
//文件到文件
try {
InputStream is = new FileInputStream(“E:/mycode/TestIO/src/1.txt”);
OutputStream os = new FileOutputStream(“2.txt”);
copy(is, os);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//文件到字节数组
byte[] temp = null;
try {
InputStream is = new FileInputStream("E:/mycode/TestIO/src/1.jpg");
ByteArrayOutputStream os = new ByteArrayOutputStream();
copy(is, os);
temp = os.toByteArray();
System.out.println(temp.length);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//字节数组到文件
try {
InputStream is = new ByteArrayInputStream(temp);
OutputStream os = new FileOutputStream("1-c.jpg");
copy(is, os);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
/**
* 对接输入输出流
* try...with...resource
* @param is
* @param os
*/
public static void copy(InputStream is,OutputStream os) {
try(InputStream iss = is;OutputStream oss = os) {//这里采用try...with...resource来释放资源
//操作 分段读取 //但是(is;os) 这种写法会报jdk版本低(编译器错误) 采用新建两个变量进行赋值的方法得以解决
byte[] flush = new byte[1024];//缓冲容器
int len = -1;//接收长度
while((len = is.read(flush)) != -1) {
os.write(flush,0,len);//分段写出
}
os.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}