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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!