package filess; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner; public class FileZongCopy02 { public static void main(String[] args) throws IOException { System.out.println("请输入要复制的文件夹"); File src = selectFile(); System.out.println("请输入复制目的文件名夹"); File dst = selectFile(); // 判断文件夹路径是否相同 if (!src.equals(dst)) { copy(src, dst); System.out.println("复制完毕。"); } else { System.out.println("录入的两个文件名相同,不能复制。"); } } // 判断录入的文件夹是否存在 private static File selectFile() { Scanner sc = new Scanner(System.in); while(true){ String s = sc.nextLine(); File name = new File(s); if(!name.exists()){ System.out.println("您输入的文件夹不存在,请重新输入:"); }else if(name.isFile()){ System.out.println("您输入的是一个文件名,请重新输入:"); }else{ return name; } } } // 复制文件夹 private static void copy(File src, File dst) throws IOException { File[] files = src.listFiles(); for (File subFile : files) { // 判断子目录是否为文件 if (subFile.isFile()) { // 指定路径 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(subFile)); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(dst, subFile.getName()))); // 开始读写 int len; byte[] b = new byte[1024]; while ((len = bis.read(b)) != -1) { bos.write(b, 0, len); } // 如果子目录仍是文件夹则创建该文件夹 } else if (subFile.isDirectory()) { File newFile = new File(dst, subFile.getName()); newFile.mkdirs(); // 继续调用文件夹复制方法 copy(subFile, newFile); } } } }