在實際開發中,經常需要批次重命名大量檔案。本文提供一個完整的 Java 實作範例,透過讀取對照表檔案,將指定目錄下的檔案依照新舊名稱對應關係進行批次重命名。
import java.io.*;
import java.util.*;
public class BatchRenameFiles {
public static void main(String[] args) throws IOException {
// 讀取對照表檔案(格式:新檔名#舊檔名)
BufferedReader br = new BufferedReader(new FileReader("output1.txt"));
List<String> newNames = new ArrayList<>();
List<String> oldNames = new ArrayList<>();
String line;
String[] columns;
// 解析每一行資料
while ((line = br.readLine()) != null) {
columns = line.split("#");
newNames.add(columns[0]);
oldNames.add(columns[1]);
}
br.close();
// 執行批次重命名
for (int i = 0; i < newNames.size(); i++) {
File oldFile = new File("D:\\TDDOWNLOAD\\heihei\\" + oldNames.get(i) + ".mp4");
System.out.println("檢查檔案是否存在: " + oldFile.exists());
File newFile = new File(oldFile.getParent() + File.separator + newNames.get(i) + ".mp4");
if (newFile.exists()) {
System.out.println(i + " 目標檔案已存在,略過");
} else {
boolean renamed = oldFile.renameTo(newFile);
System.out.println(i + "\t重命名結果: " + renamed);
}
}
}
}
使用 BufferedReader 逐行讀取對照表,透過 split("#") 分割新舊檔名,分別存入兩個 List 中保持順序對應。
採用 File.separator 而非硬編碼路徑分隔符,確保跨平台相容性。透過 oldFile.getParent() 取得原檔案目錄,避免路徑拼接錯誤。
oldFile.exists()newFile.exists()renameTo() 進行原子性重命名操作output1.txt 對照表,每行格式:新檔名#舊檔名D:\TDDOWNLOAD\heihei\)| 問題 | 原因 | 解決方法 |
|---|---|---|
| 重命名失敗返回 false | 檔案被其他程式佔用、權限不足、跨磁碟移動 | 關閉佔用程式、提升權限、改用複製後刪除方式 |
| 目標檔案已存在 | 對照表有重複新檔名、目錄已有同名檔案 | 檢查對照表去重、加入重複處理邏輯 |
| 來源檔案不存在 | 對照表舊檔名錯誤、副檔名不符 | 驗證對照表資料、支援多種副檔名 |
此範例展示了 Java 進行檔案批次重命名的標準流程:讀取對照表 → 驗證檔案存在性 → 安全重命名 → 結果回報。透過良好的錯誤處理與跨平台路徑處理,可直接應用於生產環境的檔案管理任務中。