Java批量轉(zhuǎn)換文件編碼格式的實(shí)現(xiàn)方法及實(shí)例代碼
一、場(chǎng)景說(shuō)明
不知道大家有沒(méi)有遇到過(guò)之前項(xiàng)目是GBK,現(xiàn)在需要全部換成UTF-8的情況.反正我是遇到了.
eclipse可以改變項(xiàng)目的編碼格式,但是文件如果直接轉(zhuǎn)換的話里面的中文就會(huì)全部亂碼,需要先復(fù)制文件內(nèi)容然后改變文件格式,再全選 粘貼(可能有其它更好的方法我不知道),
這樣的話一個(gè)項(xiàng)目要全部一個(gè)一個(gè)文件改,想想都難受.作為一個(gè)程序猿,就寫了個(gè)簡(jiǎn)單的方法讓程序處理.
思路:方法很簡(jiǎn)單,遍歷項(xiàng)目文件夾-篩選java擴(kuò)展文件-把文件編碼從GBK轉(zhuǎn)換成UTF-8.
注意:編碼格式一定不要弄錯(cuò),建議轉(zhuǎn)換前備份.不然你會(huì)后悔的,我為了偷懶測(cè)試了兩個(gè)工程后,就把整個(gè)工作空間轉(zhuǎn)換了,然后有的項(xiàng)目原本就是UTF-8,執(zhí)行完成后就亂碼了😂.
補(bǔ)救辦法是:把項(xiàng)目從UTF-8轉(zhuǎn)換成GBK,不亂碼了,但是有后遺癥,雖然大部分都救回來(lái)了,但是不知道某個(gè)字符就變成?了.

二、引用依賴
這里我用了國(guó)人開(kāi)發(fā)的超好用的java工具包hutool,官網(wǎng) https://hutool.cn/ 類似于lang3包,相比lang3,hutool功能更多,中文注解,中文注解,中文注解.
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>4.5.6</version> </dependency>
三、方法實(shí)現(xiàn)
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");
}
/**
* 轉(zhuǎn)換文件編碼格式
* @param path 需要轉(zhuǎn)換的文件或文件夾路徑
* @param fromCharset 原編碼格式
* @param toCharset 目標(biāo)編碼格式
* @param expansion 需要轉(zhuǎn)換的文件擴(kuò)展名,如需全部轉(zhuǎn)換則傳 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]);
//每個(gè)文件夾分個(gè)線程處理,提高點(diǎn)兒效率
new Thread(new Runnable() {
@Override
public void run() {
convertCharset(canonicalPath,fromCharset,toCharset,expansion);
}
}).start();
}else {
FileUtil.convertCharset(listFiles[i], fromCharset, toCharset);
Console.log("轉(zhuǎn)換完成文件名:{}",listFiles[i].getName());
}
}
}
}
總結(jié)
以上所述是小編給大家介紹的Java實(shí)現(xiàn) 批量轉(zhuǎn)換文件編碼格式的方法及實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
多jdk環(huán)境下指定springboot外部配置文件詳解
這篇文章主要為大家介紹了多jdk環(huán)境下指定springboot外部配置文件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
java中對(duì)Redis的緩存進(jìn)行操作的示例代碼
本篇文章主要介紹了java中對(duì)Redis的緩存進(jìn)行操作的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08
解決異常處理問(wèn)題:getReader()?has?already?been?called?for?this
這篇文章主要介紹了解決異常處理:getReader()?has?already?been?called?for?this問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
springboot Quartz動(dòng)態(tài)修改cron表達(dá)式的方法
這篇文章主要介紹了springboot Quartz動(dòng)態(tài)修改cron表達(dá)式的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之二手書商城系統(tǒng)的實(shí)現(xiàn)
這是一個(gè)使用了java+JSP+Springboot+maven+mysql+ThymeLeaf+FTP開(kāi)發(fā)的二手書商城系統(tǒng),是一個(gè)畢業(yè)設(shè)計(jì)的實(shí)戰(zhàn)練習(xí),具有在線書城該有的所有功能,感興趣的朋友快來(lái)看看吧2022-01-01
Java?List集合取交集的8種不同實(shí)現(xiàn)方式總結(jié)
工作中經(jīng)常遇到需要取兩個(gè)集合之間的交集、差集情況,下面這篇文章主要給大家總結(jié)介紹了關(guān)于Java?List集合取交集的8種不同實(shí)現(xiàn)方式,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04

