package com.gk;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class FileUtils2 {
public static void main(String[] args) {
byte[] datas = null;
try {
InputStream is = new FileInputStream("C:/Users/GK/Desktop/aa.txt");
OutputStream os = new FileOutputStream("C:/Users/GK/Desktop/aa1.txt");
cpFile(is,os);
} catch (IOException e) {
e.printStackTrace();
}
try {
InputStream is = new FileInputStream("C:/Users/GK/Desktop/test.jpg");
ByteArrayOutputStream os = new ByteArrayOutputStream();
cpFile(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("C:/Users/GK/Desktop/teeeee.jpg");
cpFile(is,os);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void cpFile(InputStream is, OutputStream os) {
try(is;os) {//利用try...with...resource释放资源,(为声明部分),释放的资源为声明中的对象
byte[] datas = new byte[10];
int len = -1;
while((len=is.read(datas)) != -1) {//不要忘记是读一个字符数组is.read(datas)
os.write(datas,0,len);
}
os.flush();
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
public static void close(InputStream is, OutputStream os) {
try {
if (os != null) {
os.close();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if (is != null) {//先打开的流后关闭
is.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void close(Closeable...ios) {//可变参数
for(Closeable io:ios) {
try {
if (io != null) {
io.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
把“通过文件流和字节数组流实现文件的拷贝”的代码进行封装
最新推荐文章于 2023-03-29 13:09:17 发布