Java如何不指定动态文件名将源文件夹文件复制到目标文件夹
Java 实现源文件夹下全部动态文件移动到目标文件夹的方案
问题根因
Files.move() 要求目标路径必须是完整的目标文件路径,而非仅目标文件夹路径。如果直接传入C:\temp1作为目标路径,JVM会尝试将源文件重命名为temp1,而不是将源文件放入temp1文件夹下,这就是你只有目标路径下存在测试文件才能运行的原因。
实现代码
无需硬编码任何文件名,会自动识别源文件夹下的所有文件,移动到目标文件夹中:
import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.io.IOException; public class FileMoveUtil { public static void main(String[] args) throws IOException { // 定义源、目标文件夹路径,可按需修改 Path srcDir = Paths.get("C:\\temp"); Path destDir = Paths.get("C:\\temp1"); // 目标文件夹不存在时自动创建 if (!Files.exists(destDir)) { Files.createDirectories(destDir); } // 遍历源文件夹下所有一级文件,自动获取动态文件名 Files.list(srcDir).forEach(sourcePath -> { try { // 拼接完整目标路径:目标文件夹 + 源文件原始文件名 Path targetPath = destDir.resolve(sourcePath.getFileName()); // 移动文件,REPLACE_EXISTING参数表示允许覆盖目标路径同名文件,不需要可删除 Files.move(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING); } catch (IOException e) { e.printStackTrace(); } }); } }
补充说明
- 如果需要移动源文件夹下的多层级子目录和文件,将
Files.list(srcDir)替换为Files.walk(srcDir)即可自动递归遍历所有内容 - 如果仅需要移动特定后缀的文件,可以在遍历前加过滤逻辑,比如
.filter(path -> path.getFileName().toString().endsWith(".csv"))仅移动csv文件
内容的提问来源于stack exchange,提问作者Revanth
相关产品推荐
相关产品推荐

