解決eclipse中的Java文件,使用idea打開的亂碼問題
吐槽:
在克隆一些Github上面資源的時候,使用idea打開,會出現亂碼的情況😖
而使用eclipse打開,這種情況就會消失。「是因為eclipse使用的是GBK編碼,idea使用的是utf-8」
這種情況困擾了我好幾次,我也試過各種軟體再轉碼,但是沒丁兒用!
終於,今天又碰到了;
是可忍,孰不可忍!
於是自己寫了一個Java類,專門用來將GBK編碼的Java文件,轉換成utf-8編碼✌️
ps:改一改,可以將utf-8,轉換成GBK
技術點:遞歸,IO流
程式碼
以下是程式碼,如果是mac作業系統,以下程式碼應該不會有什麼問題;
注意:
1、如果是window系統,文件路徑/需要轉換成\ (好像是的吧?)
2、強烈建議不要進行二次轉換,更不要進行多次轉換!!!
3、最好將需要轉換的文件夾/文件複製一份,以免出現編碼轉換的意外
4、沒了,以下程式碼有注釋
package com.project_generator.eclipseConvert;
import org.junit.Test;
import java.io.*;
import java.util.List;
/**
* 建議:最好將需要轉換的文件夾/文件複製一份,以免出現編碼轉換的意外
* 注意:不要進行二次轉換,還有一定要確定被轉換的文件是GBK格式的【一般,如果eclipse的文件放到idea中亂碼,多半是GBK格式的】
*/
public class Converter {
// 複製完全一樣的文件,包含文件夾裡面的所有內容【略--手動處理】
public static void main(String[] args) throws IOException {
new Converter().converter(new File("這裡填寫自己文件夾or文件的絕對路徑"));
}
@Test
public void converter(File file) throws IOException {
convertEclipseFiles(file); // 【必改,文件的路徑】
System.out.println("轉換成功!");
}
public void convertEclipseFiles(File file) throws IOException {
if (!file.exists()) {
throw new RuntimeException("此文件或文件夾不存在");
}
if (file.isFile() && file.getName().endsWith(".java")) { //【可改,將eclipse裡面的Java文件編碼改成utf-8】
//!! 重寫文件,最後刪除原來的文件
String absolutePath = file.getAbsolutePath();
File file1 = new File(absolutePath.substring(0, absolutePath.length() - 5) + "_copy" + ".java");
convertEncoding(file,file1);
file.delete();
file1.renameTo(new File(absolutePath));
}
if (!file.isFile()) {
File[] fs = file.listFiles();// 獲取當前文件夾下的子文件夾或者文件的file對象
if (fs != null && fs.length > 0) {
for (File ff : fs) {
convertEclipseFiles(ff);// 遞歸
}
}
}
}
/*
* 目標:把1.txt內容複製到2.txt
*/
public void convertEncoding(File oldFile, File newFile) throws IOException {
FileInputStream fis = new FileInputStream(oldFile);
FileOutputStream fos = new FileOutputStream(newFile);
byte[] content = new byte[1024];
int read = fis.read(content);
while (read != -1) {
// System.out.println(new String(content, 0, read, "GBK")); // 查看read的結果
fos.write(new String(content, 0, read, "GBK").getBytes("utf-8"));
read = fis.read(content);
}
}
}