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

如何在Java中重命名指定目录下的一级子文件夹?

Java实现一级子文件夹重命名方案

要完成你需求的文件夹重命名操作,我推荐使用Java NIO的Files类(Java 7及以上版本可用),它比传统的File.renameTo()更稳定,还能抛出明确的异常来帮助排查问题。下面是具体的实现方案:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;

public class FolderRenamer {
    public static void main(String[] args) {
        // 定义原文件夹名与新名称的映射关系,方便后续扩展更多重命名规则
        Map<String, String> renameMap = new HashMap<>();
        renameMap.put("Folder1", "Directory1");
        renameMap.put("Folder2", "Directory2");

        // 目标根目录:D盘根目录
        Path rootDir = Paths.get("D:\\");

        // 遍历根目录下的所有子项,用try-with-resources自动关闭流避免资源泄漏
        try (var directoryStream = Files.newDirectoryStream(rootDir)) {
            for (Path item : directoryStream) {
                // 只处理一级子文件夹,跳过文件类型的子项
                if (Files.isDirectory(item)) {
                    String originalName = item.getFileName().toString();
                    // 如果当前文件夹在需要重命名的列表中
                    if (renameMap.containsKey(originalName)) {
                        String newName = renameMap.get(originalName);
                        Path targetPath = rootDir.resolve(newName);

                        // 安全检查:如果目标文件夹已存在,跳过避免覆盖
                        if (Files.exists(targetPath)) {
                            System.err.println("目标文件夹 " + newName + " 已存在,跳过重命名");
                            continue;
                        }

                        // 执行重命名操作
                        Files.move(item, targetPath);
                        System.out.println("已成功将 " + originalName + " 重命名为 " + newName);
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
            System.err.println("重命名过程中出现错误:" + e.getMessage());
        }
    }
}

代码关键点说明:

  • 映射关系管理:用HashMap存储需要重命名的文件夹对,后续要加更多重命名规则时直接往Map里加键值对即可,非常灵活。
  • NIO的Files.move():这是核心操作方法,不仅支持重命名,还能处理跨文件系统的移动操作;失败时会抛出具体的IOException(比如权限不足、文件被占用等),比旧API更容易调试。
  • 安全校验:重命名前先判断目标路径是否存在,避免意外覆盖已有文件或文件夹。

兼容旧版本的备选方案(Java 7之前)

如果需要兼容更早的Java版本,可以使用传统的File类,但要注意它的局限性——重命名失败时只会返回false,不会给出具体失败原因,排查问题会麻烦一些:

import java.io.File;
import java.util.HashMap;
import java.util.Map;

public class LegacyFolderRenamer {
    public static void main(String[] args) {
        Map<String, String> renameMap = new HashMap<>();
        renameMap.put("Folder1", "Directory1");
        renameMap.put("Folder2", "Directory2");

        File rootDir = new File("D:\\");
        File[] items = rootDir.listFiles();

        if (items != null) {
            for (File item : items) {
                if (item.isDirectory()) {
                    String originalName = item.getName();
                    if (renameMap.containsKey(originalName)) {
                        String newName = renameMap.get(originalName);
                        File targetFile = new File(rootDir, newName);

                        if (targetFile.exists()) {
                            System.err.println("目标文件夹 " + newName + " 已存在,跳过");
                            continue;
                        }

                        boolean success = item.renameTo(targetFile);
                        if (success) {
                            System.out.println("重命名成功:" + originalName + " -> " + newName);
                        } else {
                            System.err.println("重命名失败:" + originalName);
                        }
                    }
                }
            }
        }
    }
}

额外注意事项:

  • 权限问题:确保运行程序的用户拥有D盘的读写权限,否则会抛出权限相关的异常。
  • 文件夹状态:重命名时要保证原文件夹没有被其他进程占用,否则操作会失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:47:36