利用字节流InputStream和OutputStream的实现类FileInputStream和FileOutputStream实现一个文件拷贝的copyFile函数,进行分段读和分段写的过程。
实现的copyFile函数第一个参数是String类型的表示要拷贝的源文件相对路径,第二个参数是String类型的表示要拷贝到的目的文件相对路径,调用函数即可完成文件内容拷贝。
package cn.yzy.io;
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;
public class copyFile {
public static void main(String[] args) {
copyFile("src.txt", "dest.txt");
}
public static void copyFile(String src, String dest) {
File srcFile = new File(src.toString());
File destFile = new File(dest.toString()); //文件不存在会自动创建
InputStream is = null;
OutputStream os = null;
try {
is = new FileInputStream(srcFile);
os = new FileOutputStream(destFile, false);
//如果是覆盖写可以用第二个参数false,也可以用单参数构造方法默认就是覆盖
//第一个参数是File,第二个参数是boolean类型,true表示append
byte[] flush = new byte[1024*1]; //缓冲容器
int len = 0;
while((len=is.read(flush))!=-1) { //分段读取
os.write(flush, 0, len); //分段写
}
os.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
//关闭资源,先打开的后关闭
try {
if(null != os)
os.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if(null != os)
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}