- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.util.Scanner;
- public class CopyFileToDest {
- /**
- * 从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
- */
- public static void main(String[] args) throws IOException {
- File src = getDir();
- File dest = getDir();
- if(src.equals(dest)) { //当源文件和目标文件一致时不能拷贝
- System.out.println("不能拷贝,源文件和目的文件一致");
- } else {
- copyDir(src, dest);
- }
- }
-
- private static File getDir() {
- Scanner sc = new Scanner(System.in);
- System.out.println("请输入一个文件夹路径:");
- while (true) {
- String line = sc.nextLine();
- File file = new File(line);
- if (!file.exists()) {
- System.out.println("你输入的路径不存在,请重新输入:");
- } else if (file.isFile()) {
- System.out.println("你输入的是文件路径,请重新输入文件夹路径:");
- } else
- return file;
- }
- }
- private static void copyDir(File src, File dest) throws IOException { //src源文件 dest目的目录
- File newDir = new File(dest, src.getName()); //创建目的目录,要拷贝到目的文件下,源文件名字不变
- newDir.mkdir(); //创建该文件夹或文件
- File[] subFiles = src.listFiles(); //获取源文件的所有文件盒文件夹目录
- for (File subFile : subFiles) { //遍历整个目录
- if (subFile.isFile()) {
- FileInputStream fis = new FileInputStream(subFile); //创建文件源,也就是遍历到的当前文件
- //创建File对象,父级目录是我们创建好的目录,名字还是原来文件的名字
- FileOutputStream fos =
- new FileOutputStream(new File(newDir,subFile.getName()));
- byte[] arr = new byte[1024];
- int len;
- while ((len = fis.read(arr)) != -1) {
- fos.write(arr, 0, len);
- }
- fis.close();
- fos.close();
- } else if (subFile.isDirectory()) {
- copyDir(subFile,newDir); //当是文件夹时已当前文件夹作为源文件夹 、我们建好的文件夹作为目的在进行文件拷贝
- }
- }
- }
- }
复制代码 |