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 ...
随机推荐
- MyBatis注解及动态Sql
一.注解实现MyBatis配置 java注解是在jdk1.5版本之后开始加入的,不得不说注解对于我们开发人员来说是个很方便的东西,实现起来也非常的简单,下边我们说一下在MyBatis中使用注解来替换M ...
- PEAKS|NovoHMM|Nover|DeepNovo|MAYUPercolator|UniprotKB|Swiss-prot|Mascot|SEQUEST|X!Tandem|pFind|MaxQuant|Msconvert|PEPMASS|LC|
质谱仪: 质谱分析法是先将大分子电离为带电粒子,按质核比分离,由质谱仪识别电信号得到质谱图. Top-down直接得到结果是蛋白. Bottom down使用shutgun方法得到结果是肽段. 由蛋白 ...
- Steve Lin:如何撰写一篇优秀的SIGGRAPH论文
Lin:如何撰写一篇优秀的SIGGRAPH论文" title="Steve Lin:如何撰写一篇优秀的SIGGRAPH论文"> 英文原版 PPT下载:http:// ...
- 3DSMAX卸载/完美解决安装失败/如何彻底卸载清除干净3DSMAX各种残留注册表和文件的方法
在卸载3dsmax重装3dsmax时发现安装失败,提示是已安装3dsmax或安装失败.这是因为上一次卸载3dsmax没有清理干净,系统会误认为已经安装3dsmax了.有的同学是新装的系统也会出现3ds ...
- docker 创建实例
docker创建mysql实例要注意表名大小写和端口号映射的问题.下面是使用文件挂载解决表名大小写问题. docker run --name mysql-1 -e MYSQL_ROOT_PASSWOR ...
- labview的bool(布尔)按键机械属性
在学习LabVIEW(简称LV)时,布尔控件是常用的控件.布尔控件分为按钮型控件和开关型控件,LV内部并没有区分按钮型还是开关型.这两种布尔控件可以根据需要相互转换,通过配置布尔控件的机械动作属性来实 ...
- C++入门级小算法
反序输出一个整数 #include <iostream> using namespace std; int main() { int n; while (cin >> n)// ...
- hql错误:No data type for node: org.hibernate.hql.ast.tree.IdentNode
今天写了一个查询,用的是hql,数据库是mysql.多表联查,结果报错了报: \-[IDENT] IdentNode: 'routerNumber' {originalText=routerNumbe ...
- c++入门资源
http://www.cnblogs.com/jackyyang7/articles/2479482.htmlvs2010编译器的使用 https://www.cnblogs.com/me115/ar ...
- 修改 MyEclipse 编辑区域背景颜色