public class CopyTest {
public static void main(String[] args) throws IOException {
System.out.println("请输入要拷贝的文件夹(绝对路径):");
String srcPath = new Scanner(System.in).nextLine();
System.out.println("请输入要拷贝的位置(绝对路径):");
String destPath = new Scanner(System.in).nextLine();
//String srcPath = "C:\\A";
//String destPath = "c:\\B";
copyFile(srcPath,destPath);
System.out.println("复制完成!");
}
// 复制文件夹的方法
private static void copyFile(String srcPath,String destPath) throws IOException{
// 利用源文件路径创建File对象
File srcFile = new File(srcPath);
// 判断路径是否合法
if(!srcFile.exists()){
System.out.println("未找到此源目录...");
return;
}else if(srcFile.isFile()){
copy(srcPath,destPath);
return;
}
// 创建File对象
File destFile = new File(destPath);
if(!destFile.exists()){// 判断是否存在
destFile.mkdirs();
}
// 获取所有文件和文件夹
File[] files = srcFile.listFiles();
// 遍历,如果是文件夹递归调用copyFile方法,如果是文件调用复制文件方法
for(File file : files){
System.out.print(file.getName());
if(file.isDirectory()){//文件夹
copyFile(srcPath + "\\" + file.getName(),destPath + "\\" + file.getName());
}
if(file.isFile()){//文件
copy(srcPath + "\\" + file.getName(),destPath + "\\" + file.getName());
System.out.println("复制完成");
}
}
}
// 复制文件方法
public static void copy(String srcPath,String destPath) throws IOException {
// 创建字节缓冲流对象
BufferedInputStream bi = new BufferedInputStream(new FileInputStream(srcPath));
BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream(destPath));
// 复制文件(边读边写)
byte[] buf = new byte[1024];
int len = 0;
while((len = bi.read(buf))!=-1){
bo.write(buf, 0, len);
}
bo.close();
bi.close();
}
}
运行效果:
复制完成: