需要注意點:
建議轉換前備份,如果有的項目原本就是UTF-8,執行完成后就會亂碼
補救辦法是:把項目從UTF-8轉換成GBK,不亂碼了,但是有后遺症,雖然大部分都救回來了,但是不知道某個字符就變成?了
1、首先需要引用java工具包hutool,官網 https://hutool.cn/
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>4.5.6</version> </dependency>
2、具體實現
import java.io.File; import java.io.FileFilter; import java.nio.charset.Charset; import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.Console; import cn.hutool.core.util.StrUtil; public class ConcertEncodeing { public static void main(String[] args) { convertCharset("D:\\workspaces\\workspaceOxygen\\ceshi",Charset.forName("GBK"),Charset.forName("UTF-8"),"java"); } /** * 轉換文件編碼格式 * @param path 需要轉換的文件或文件夾路徑 * @param fromCharset 原編碼格式 * @param toCharset 目標編碼格式 * @param expansion 需要轉換的文件擴展名,如需全部轉換則傳 null */ private static void convertCharset(String path,Charset fromCharset,Charset toCharset,String expansion ) { if (StrUtil.isBlank(path)) { return; } File file = FileUtil.file(path); File[] listFiles = file.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { if (StrUtil.isBlank(expansion)) { return true; } if (FileUtil.isDirectory(pathname)||FileUtil.extName(pathname).equals("java")) { return true; } return false; } }); for (int i = 0; i < listFiles.length; i++) { if (listFiles[i].isDirectory()) { String canonicalPath = FileUtil.getCanonicalPath(listFiles[i]); //每個文件夾分個線程處理,提高點兒效率 new Thread(new Runnable() { @Override public void run() { convertCharset(canonicalPath,fromCharset,toCharset,expansion); } }).start(); }else { FileUtil.convertCharset(listFiles[i], fromCharset, toCharset); Console.log("轉換完成文件名:{}",listFiles[i].getName()); } } } }