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