Java实现文件批量复制至指定日期范围文件夹的问题
解决方案:按日期范围批量复制文件到对应目录
核心需求是一次性将指定文件复制到[起始日期, 结束日期]区间内的所有日期文件夹,无需逐个输入目标路径。以下是基于现有代码的改造方案:
改造思路
- 复用或重新获取日期范围参数,避免用户重复输入
- 读取待复制的源文件路径,先校验文件合法性
- 遍历日期区间内的每个文件夹,自动拼接目标文件路径并执行复制
- 增加异常处理,覆盖源文件不存在、目标文件夹缺失、权限问题等场景
完整改造代码
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"判断
使用流程
- 运行程序后,选择是否创建日期文件夹(已存在可选择no)
- 输入起始日期和结束日期
- 选择复制文件,输入待复制文件的完整路径
- 程序自动将文件复制到该日期区间内的所有文件夹
- 可选择继续复制其他文件
内容的提问来源于stack exchange,提问作者Ash
相关产品推荐
相关产品推荐

