Java批量按规则重命名文件代码运行后未生效问题求助
问题排查结果
- 路径拼接错误:目标文件名拼接时,父目录
D:\\LibriInformatica和文件名之间缺少路径分隔符\\,最终生成的路径是非法的,比如会变成D:\LibriInformatica测试.pdf而非正确的D:\LibriInformatica\测试.pdf,重命名自然无法生效。 - 重命名时机错误:每匹配一个规则就调用一次
renameTo,如果一个文件同时匹配多个规则,第一次重命名后原文件已经不存在,后续的重命名操作全部会失败。应该先计算出最终的目标文件名,再统一执行一次重命名。 - 文件名处理逻辑漏洞:每次分割后直接拼接
.pdf,会导致原本已经带.pdf后缀的文件变成xxx.pdf.pdf的双后缀;直接使用路径分割取titolo[2]的逻辑非常脆弱,一旦目录层级发生变化就会触发数组越界,不如直接调用File类的getName()方法直接获取文件名。 - 没有异常/返回值校验:
renameTo方法是有布尔返回值的,返回false就代表重命名失败,原代码没有做任何校验,也没有处理文件被占用、目标文件已存在、权限不足等常见异常场景。
修正后代码
import java.io.File; public class ChangeName { public static void main(String[] args) { File cartella = new File("D:\\LibriInformatica"); // 先校验目录合法性 if (!cartella.exists() || !cartella.isDirectory()) { System.out.println("目标目录不存在"); return; } File[] listaDiFile = cartella.listFiles(); if (listaDiFile == null) { System.out.println("无法读取目录下的文件"); return; } String parentPath = cartella.getAbsolutePath() + File.separator; for (File file : listaDiFile) { if (file.isFile()) { // 直接获取原始文件名,不需要拆分路径 String originalName = file.getName(); String fileName = originalName; String suffix = ""; // 分离文件名和后缀,避免重复加.pdf int dotIndex = originalName.lastIndexOf("."); if (dotIndex > 0) { fileName = originalName.substring(0, dotIndex); suffix = originalName.substring(dotIndex); } // 依次处理重命名规则,仅修改文件名部分 if (fileName.contains("( PDFDrive )")) { fileName = fileName.split("\\( PDFDrive \\)")[0].trim(); } if (fileName.contains("_")) { fileName = fileName.split("_")[0].trim(); } if (fileName.contains("-")) { fileName = fileName.split("-")[0].trim(); } // 生成最终文件名 String finalName = fileName + suffix; File targetFile = new File(parentPath + finalName); // 跳过同名文件 if (targetFile.exists()) { System.out.println("目标文件" + finalName + "已存在,跳过" + originalName); continue; } // 执行重命名并判断结果 boolean renameResult = file.renameTo(targetFile); if (renameResult) { System.out.println("重命名成功:" + originalName + " -> " + finalName); } else { System.out.println("重命名失败:" + originalName + ",可能是文件被占用或权限不足"); } } } } }
内容的提问来源于stack exchange,提问作者Federico Calò
相关产品推荐
相关产品推荐

