You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现文件批量复制至指定日期范围文件夹的问题

解决方案:按日期范围批量复制文件到对应目录

核心需求是一次性将指定文件复制到[起始日期, 结束日期]区间内的所有日期文件夹,无需逐个输入目标路径。以下是基于现有代码的改造方案:

改造思路

  1. 复用或重新获取日期范围参数,避免用户重复输入
  2. 读取待复制的源文件路径,先校验文件合法性
  3. 遍历日期区间内的每个文件夹,自动拼接目标文件路径并执行复制
  4. 增加异常处理,覆盖源文件不存在、目标文件夹缺失、权限问题等场景

完整改造代码

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Objects;
import java.util.Scanner;

public class DateFolderFileCopier {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String baseDir = "C:\\Users\\asmuhamm\\Documents\\";
        int fromDate = 0;
        int toDate = 0;

        // 处理日期文件夹创建(可选)
        System.out.println("Do you want to create dated folders?");
        String answer1 = scanner.nextLine();
        if (Objects.equals(answer1, "yes")) {
            System.out.println("Enter folder from date: ");
            fromDate = scanner.nextInt();
            System.out.println("Enter folder to date: ");
            toDate = scanner.nextInt();
            scanner.nextLine(); // 清除换行符,避免后续输入异常

            // 创建日期文件夹逻辑
            for (int i = fromDate; i <= toDate; i++) {
                File folder = new File(baseDir + i);
                if (!folder.exists()) {
                    if (folder.mkdirs()) {
                        System.out.println(folder.getName() + " created successfully.");
                    } else {
                        System.out.println("Error creating " + folder.getName());
                    }
                } else {
                    System.out.println(folder.getName() + " already exists.");
                }
            }
        } else {
            // 不创建文件夹时,直接获取日期范围
            System.out.println("Enter folder from date: ");
            fromDate = scanner.nextInt();
            System.out.println("Enter folder to date: ");
            toDate = scanner.nextInt();
            scanner.nextLine();
        }

        // 批量复制文件到日期文件夹
        System.out.println("Do you want to copy files into folders? ");
        String answer2 = scanner.nextLine();
        if (Objects.equals(answer2, "yes")) {
            String again;
            do {
                System.out.println("Enter file source path: ");
                String sourcePath = scanner.nextLine();
                Path source = Paths.get(sourcePath);

                // 校验源文件是否存在
                if (!Files.exists(source)) {
                    System.out.println("Error: Source file does not exist!");
                    continue;
                }

                String fileName = source.getFileName().toString();

                // 遍历日期区间执行批量复制
                for (int i = fromDate; i <= toDate; i++) {
                    String targetFolderPath = baseDir + i;
                    File targetFolder = new File(targetFolderPath);
                    if (!targetFolder.exists()) {
                        System.out.println("Skipping " + targetFolderPath + ": Folder does not exist");
                        continue;
                    }

                    Path target = Paths.get(targetFolderPath, fileName);
                    try {
                        Files.copy(source, target);
                        System.out.println("Copied to " + target.toString());
                    } catch (Exception e) {
                        System.out.println("Error copying to " + target.toString() + ": " + e.getMessage());
                    }
                }

                System.out.println("Batch copy completed. Copy another file? ");
                again = scanner.nextLine();
            } while (again.equalsIgnoreCase("yes"));
        } else {
            System.exit(0);
        }
        scanner.close();
    }
}

关键改进点

  • 参数复用:统一处理日期范围输入,无论是否创建文件夹都能直接使用
  • 批量逻辑:通过循环遍历日期区间,自动生成每个文件夹的目标路径,一次完成所有复制操作
  • 异常防护:增加源文件、目标文件夹的存在性校验,捕获复制时的异常并给出明确提示
  • 体验优化:处理Scanner的换行符问题,支持大小写不敏感的"yes"判断

使用流程

  1. 运行程序后,选择是否创建日期文件夹(已存在可选择no)
  2. 输入起始日期和结束日期
  3. 选择复制文件,输入待复制文件的完整路径
  4. 程序自动将文件复制到该日期区间内的所有文件夹
  5. 可选择继续复制其他文件

内容的提问来源于stack exchange,提问作者Ash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:25:20