java IO流实现文件拷贝
1、首先判断源文件夹是否存在,如果没有存在就结束
2、源文件存在遍历文件夹下文件
3、如果是文件,就用字节缓冲流写入目标文件夹
4、如果是文件夹,采用递归进行文件复制
package Test;
import java.io.*;
public class CopyFile {
public static void main(String[] args) {
try {
copyDir("D:\\abc","D:\\abd");
} catch (Exception e) {
e.printStackTrace();
}
}
private static void copyDir(String sourceDir,String targetDir) throws Exception{
File source=new File(sourceDir);
//判断源文件目录是存在
if (!source.exists()||!source.isDirectory()){
return;
}
File target=new File(targetDir);
//判断目标文件目录是存在
if(!target.exists()||!target.isDirectory()){
target.mkdirs();
}
//遍历源文件
File [] files=source.listFiles();
for (int i=0;i<files.length;i++){
if (files[i].isFile()){
//源文件
File sourceFile=files[i];
//目标文件
File targetFile=new File(targetDir,files[i].getName());
BufferedInputStream buffIn=null;
BufferedOutputStream buffOut=null;
try {
//文件字节输入流
buffIn=new BufferedInputStream(new FileInputStream(sourceFile));
//文件字节输出流
buffOut=new BufferedOutputStream(new FileOutputStream(targetFile));
byte[] b=new byte[1024*5];
int len;
while ((len=buffIn.read(b))!=-1){
buffOut.write(b, 0, len);
}
buffOut.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
if (buffIn!=null){
buffIn.close();
}if (buffOut!=null){
buffOut.close();
}
}
}
//如果是文件夹,递归复制文件
if (files[i].isDirectory()){
String subSourceDir= sourceDir+File.separator+files[i].getName();
String subTargetDir= targetDir+File.separator+files[i].getName();
copyDir(subSourceDir, subTargetDir);
}
}
}
}