import java.io.*;
public class CopyTest {
public static void main(String[] args) {
File srcFile = new File("D:\a"); //拷贝源
File destFile = new File("E:\IDEA"); //要拷贝到的目的地,要拷贝到这个目录下 就是E:IDEAa
// 采用一个静态方法
copyDir(srcFile,destFile);
}
private static void copyDir(File srcFile , File destFile) {
if(srcFile.isFile()){
// 如果srcFile是一个文件夹的情况下,就运行这段代码
FileInputStream fis =null;
FileOutputStream fos =null;
try {
// secFile 和 destFile 其实就是一个地址的对象 里面保存的时候一个文件的地址,可将其作为参数传入到IO流中
fis = new FileInputStream(srcFile);
// 拼凑一下目标地址
String path = ( destFile.getAbsolutePath().endsWith("\") ? destFile.getAbsolutePath() : destFile.getAbsolutePath()+"\") + srcFile.getAbsolutePath().substring(3);
fos = new FileOutputStream(path);
byte[] bytes = new byte[1024*1024]; //一次传输1M
int readCount =0;
while( (readCount = fis.read(bytes)) !=-1){
fos.write(bytes,0,readCount);
}
fos.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fis!=null){
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 然后就copy完成了
return;
}
// 如果不是一个文件,而是一个目录的话,就运行下面这段代码
File[] files = srcFile.listFiles(); //获取原目录下面的子目录 就是a目录下面的子目录
for(File file : files){
if(srcFile.isDirectory()){
// 如果是一个目录的话,就运行这段代码
String srcDir = file.getAbsolutePath();
String destDir = ( destFile.getAbsolutePath().endsWith("\") ? destFile.getAbsolutePath() : destFile.getAbsolutePath()+"\") + srcDir.substring(3);
File newFile = new File(destDir);
if( !newFile.exists()){
// 如果不存在的话就创建出来
newFile.mkdirs();
}
}
// 递归
copyDir(file,destFile);
}
}
}