Java實現GBK轉碼到UTF-8(文件)


所以,虛無的悲嘆,尋根問底仍是由於肉身的圈定。肉身蒙蔽了靈魂的眼睛,單是看見要回那無中去,卻忘了你原是從那無中來。                                              ——史鐵生 《病隙碎筆》

 

 

 

 

嗯,需求是這樣的:

需要爬一點東西,我用python爬到,然后保存成JSON文件,但是開發環境是windows,所以文件保存是以GBK的編碼保存的。然后我需要把JSON解析為POJO,然后給持久層。,但是Java編碼環境是UTF-8,所以我想把文件轉換為UTF-8,覺得應該可以GBK的方式讀取,直接解析,不做處理,但是考慮控制台日志啥的,其他不定項因素,網上參考部分,寫了這個。

我是這樣解決的:

 

package com.liruilong.demotext.service.utils; import java.io.*; /** * @Description : * @Author: Liruilong * @Date: 2020/3/15 18:37 */
public class EncodingUtil { public static void gbkAndUtf8(File file) { if (!file.exists() || file.isDirectory()) { System.out.println("輸入路徑不對"); } else { // 以GBK格式,讀取文件
            FileInputStream fileInputStream = null; InputStreamReader inputStreamReader = null; BufferedReader bufferedReader = null; FileOutputStream fileOutputStream = null; OutputStreamWriter outputStreamWriter = null; try { fileInputStream = new FileInputStream(file); inputStreamReader = new InputStreamReader(fileInputStream, "GBK"); bufferedReader = new BufferedReader(inputStreamReader); String str = null; // 創建StringBuffer字符串緩存區
                StringBuffer stringBuffer = new StringBuffer(); // 通過readLine()方法遍歷讀取文件
                while ((str = bufferedReader.readLine()) != null) { // 使用readLine()方法無法進行換行,需要手動在原本輸出的字符串后面加"\n"或"\r"
                    str += "\n"; stringBuffer.append(str); } String str2 = stringBuffer.toString(); // 以UTF-8格式寫入文件,file.getAbsolutePath()即該文件的絕對路徑,false代表不追加直接覆蓋,true代表追加文件
                fileOutputStream = new FileOutputStream(file.getAbsolutePath(), false); outputStreamWriter = new OutputStreamWriter(fileOutputStream, "UTF-8"); outputStreamWriter.write(str2); outputStreamWriter.flush(); } catch (IOException e) { e.printStackTrace(); } finally { allClose(outputStreamWriter, fileOutputStream, bufferedReader, inputStreamReader, fileInputStream); } } } public static void allClose(Closeable... closeables) { for (Closeable closeable : closeables) { try { closeable.close(); } catch (IOException e) { e.printStackTrace(); } } } }

 

原博主博客,,用了遞歸,多個文件夾:

package com.zjx.file; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; /* * 需求:請大家把自己一個文件目錄的所有文件格式以UTF-8輸出,然后以GBK寫入。 * 分析: * A:封裝目錄 * B:遍歷文件,獲取該目錄下的所有以.java結尾的文件 * C.讀取該文件,遍歷至StringBuffer文件 * D.寫入文件 */
public class FilePathDemo { public static void main(String[] args) throws IOException { // 封裝目錄,需要修改文件格式的路徑
        File srcFolder = new File("文件路徑"); // 遞歸功能實現
 getAllJavaFilePaths(srcFolder); } private static void getAllJavaFilePaths(File srcFolder) throws IOException { // 獲取該目錄下所有的文件或者文件夾的File數組
        File[] fileArray = srcFolder.listFiles(); // 遍歷該File數組,得到每一個File對象
        for (File file : fileArray) { // 繼續判斷是否以.java結尾,不是的話繼續調用getAllJavaFilePaths()方法
            if (file.isDirectory()) { getAllJavaFilePaths(file); } else { if (file.getName().endsWith(".java")) { // 以GBK格式,讀取文件
                    FileInputStream fis = new FileInputStream(file); InputStreamReader isr = new InputStreamReader(fis, "GBK"); BufferedReader br = new BufferedReader(isr); String str = null; // 創建StringBuffer字符串緩存區
                    StringBuffer sb = new StringBuffer(); // 通過readLine()方法遍歷讀取文件
                    while ((str = br.readLine()) != null) { // 使用readLine()方法無法進行換行,需要手動在原本輸出的字符串后面加"\n"或"\r"
                        str += "\n"; sb.append(str); } String str2 = sb.toString(); // 以UTF-8格式寫入文件,file.getAbsolutePath()即該文件的絕對路徑,false代表不追加直接覆蓋,true代表追加文件
                    FileOutputStream fos = new FileOutputStream(file.getAbsolutePath(), false); OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8"); osw.write(str2); osw.flush(); osw.close(); fos.close(); br.close(); isr.close(); fis.close(); } } } } }

轉載:

https://blog.csdn.net/weixin_42038771/article/details/80490505


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM