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
Java实现GBK转码到UTF-8(文件)的更多相关文章
- java 将GBK编码文件转为UTF-8编码
需要commons-io-2.0.1.jar public class Test { public static void main(String args[]) throws IOException ...
- JAVA小项目实例源码—学习娱乐小助手
代码地址如下:http://www.demodashi.com/demo/11456.html 一.程序实现 项目目录: MyJFrame:实现项目界面样式: AppProcess:实现调用api或爬 ...
- java编译后字节码解析
java编译后字节码解析 参考网摘: https://my.oschina.net/indestiny/blog/194260
- 利用JAVA生成二维码
本文章整理于慕课网的学习视频<JAVA生成二维码>,如果想看视频内容请移步慕课网. 维基百科上对于二维码的解释. 二维条码是指在一维条码的基础上扩展出另一维具有可读性的条码,使用黑白矩形图 ...
- java 模拟qq源码
java 模拟qq源码: http://files.cnblogs.com/files/hujunzheng/QQ--hjzgg.zip
- Java并发包源码学习之AQS框架(四)AbstractQueuedSynchronizer源码分析
经过前面几篇文章的铺垫,今天我们终于要看看AQS的庐山真面目了,建议第一次看AbstractQueuedSynchronizer 类源码的朋友可以先看下我前面几篇文章: <Java并发包源码学习 ...
- Java并发包源码学习之AQS框架(三)LockSupport和interrupt
接着上一篇文章今天我们来介绍下LockSupport和Java中线程的中断(interrupt). 其实除了LockSupport,Java之初就有Object对象的wait和notify方法可以实现 ...
- Java并发包源码学习之AQS框架(一)概述
AQS其实就是java.util.concurrent.locks.AbstractQueuedSynchronizer这个类. 阅读Java的并发包源码你会发现这个类是整个java.util.con ...
- 如何查看JDK以及JAVA框架的源码
如何查看JDK以及JAVA框架的源码 设置步骤如下: 1.点 “window”-> "Preferences" -> "Java" -> &q ...
随机推荐
- 康耐视软件VisionPro-max-u与VisionPro-plus-u的区别
康耐视软件VisionPro-max-u与VisionPro-plus-u的区别 1.VisionPro-plus-u为基础版可以直接运用该软件包的算法,拖拽式的窗口程序 2.VisionPro-ma ...
- 学习C++之前要先学习C语言吗?
C++ 读作“C加加”,是“C Plus Plus”的简称.顾名思义,C++ 是在C语言的基础上增加新特性,玩出了新花样,所以叫“C Plus Plus”,就像 iPhone 7S 和 iPhone ...
- Chrome开发者调试工具
参考资料 Chrome Console不完全指南 Chrome使用技巧 Chrome开发工具详解 结束语 工欲善其事,必先利其器.
- 为什么前两年大热的VR创业突然冷了?
不得不说,如果不是<头号玩家>在国内的热映,人们似乎都要忘记VR这个行业了.<头号玩家>中那些带有极强真实色彩的游戏,其实就是VR进化的目标,甚至是巅峰!而里面的角色佩戴的设备 ...
- 反编译.net下的exe程序
1. 什么叫.net平台 .NET框架是一个多语言组件开发和执行环境,它提供了一个跨语言的统一编程环境..NET框架的目的是便于开发人员更容易地建立Web应用程序和Web服务,使得Internet上的 ...
- Nginx笔记总结十二:nginx版本号隐藏
vim nginx.conf http { server_tokens off;} php-fpm fastcgi.conf或fcgi.conf fastcgi_param SERVER_SOFTWA ...
- 吴裕雄--天生自然 R语言开发学习:回归(续二)
#------------------------------------------------------------# # R in Action (2nd ed): Chapter 8 # # ...
- hexo命令
2017-09-12 by chenyan 安装 npm install hexo -g #安装npm update hexo -g #升级hexo init #初始化 简写 hexo n " ...
- js javascript 获取url,获得当前页面的url,静态html文件js读取url参数
获得当前页面的url window.location.href 静态html文件js读取url参数 location.search; //获取url中"?"符后的字串 下边为转载的 ...
- 每天一个linux命令(15)-tail
tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不断刷新, ...