所以,虚无的悲叹,寻根问底仍是由于肉身的圈定。肉身蒙蔽了灵魂的眼睛,单是看见要回那无中去,却忘了你原是从那无中来。                                              ——史铁生 《病隙碎笔》

 

 

 

嗯,需求是这样的:

实习测试需要爬一点东西,我用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();
            }
        }
    }
}

 

版权声明:本文为liruilong原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/liruilong/p/12499457.html