Java实现批量重命名中文文件夹和中文文件名,中文转拼音重命名多层级文件夹中遍历所有文件

2023-12-13 06:15:57

最近的业务中拿到了来自其他部门预处理过的文件压缩包,包含多个目录层级,最终文件是png和webp,为了批量上传CDN调用并且不改变整体的文件结构和对应关系,需要实现一个批量拷贝并且处理中文目录、中文文件名的功能,都转为拼音重命名
工具类的话一开始尝试了Pinyin4j但比较繁琐,最终用到了hutool里的拼音工具类,很方便一行搞定,可以先看下文本转拼音的代码:

import cn.hutool.extra.pinyin.PinyinUtil;


public static String convert(String chineseName) {
        String pinyin = PinyinUtil.getPinyin(chineseName, "");
        if (pinyin.contains("(")){// 去除中文括号
            return pinyin.replace("(", "");
            return pinyin.replace(")", "");
        }
        return pinyin;
    }

然后直接上代码,用到递归处理文件夹

public static void convertDirs(File file) {
        if (file.isFile()) {
            // 如果是文件则复制并重命名
            String fileName = "";
            String convert = convert(file.getName());
            if (convert.contains("(")) {
                String replace = convert.replace("(", "");
                fileName = replace.replace(")", "");
            } else fileName = convert;
            File newFile = new File(file.getParent() + "/" + fileName);
            FileUtil.copy(file, newFile, false);
        }
        // 是目录
        File[] files = file.listFiles();
        for (File f : files) {
            if (f.isFile()) {
                // 是文件,重命名放同级拼音目录
                File newFile = new File(workDir + convert(f.getPath().replace(workDir, "")));
                // copy
                FileUtil.copy(f, newFile, false);
            } else {
                // 是目录,拷贝拼音目录,递归
                File wDir = new File(workDir + convert(f.getPath().replace(workDir, "")));
                wDir.mkdirs();
                convertDirs(f);
            }
        }
    }

上面的代码里共同引用到一个工作目录,就是要处理的文件夹的上层目录,方便替换后重建同层级下的对应文件夹
所以main方法和全局变量是这么写的

	public static String workDir = "上级目录全路径";

    public static void main(String[] args) throws BadHanyuPinyinOutputFormatCombination {
        File file = new File(workDir + "要处理的目录名");
        convertDirs(file);
        // convertFiles(Arrays.asList(new File("要处理的目录全路径").listFiles()));// 原路径覆盖汉字重命名拼音
    }

注释中还有一种处理方案是对所有文件的重命名并覆盖,代码如下

	public static void convertFiles(List<File> files) {
        String fileName = "";
        for (File file : files) {
            String convert = convert(file.getName());
            if (convert.contains("(")) {
                String replace = convert.replace("(", "");
                fileName = replace.replace(")", "");
            } else {
                fileName = convert;
            }
            File newFile = new File(file.getParent() + "/" + fileName);
            file.renameTo(newFile);
        }
    }

文章来源:https://blog.csdn.net/weixin_45952509/article/details/134950473
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。