本文介绍怎样利用 Java 实现将 GB2312 编码文件转换成 UTF-8 编码,代码如下:
import java.io.*;
/**
* 利用 Java 实现将 GB2312 编码文件转换成 UTF-8 编码文件
* @author huangxin 2022/10/19
*/
public class Demo {
public static void main(String[] args) throws Exception {
// 源文件目录
File source = new File("C:\\Users\\Administrator\\Desktop\\面试题");
// 目标目录:存放转换后的文件
File target = new File("C:\\Users\\Administrator\\Desktop\\面试题\\out");
// 如果目标目录不存在,则创建
if(!target.exists()) {
target.mkdirs();
}
// 迭代所有 txt 文件
File[] files = source.listFiles();
if(files == null) {
files = new File[0];
}
for(File file : files) {
String fileName = file.getName();
if(!fileName.endsWith(".txt")) {
continue;
}
File output = new File(target + File.separator + file.getName());
// 开始执行转换
new Demo(file, output);
}
}
private Demo(File input, File output) throws Exception {
BufferedReader reader = null;
BufferedWriter writer = null;
try {
// 使用 GB2312 将文件内容通过字节流读入到内存
reader = new BufferedReader(new InputStreamReader(new FileInputStream(input), "GB2312"));
// 使用 UTF-8 将内存中的字节流输出到文件中
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(output), "UTF-8"));
String line;
while ((line = reader.readLine()) != null) {
// 去除每行收尾的双引号,特殊业务,读者可以删除
line = line.replaceAll("(^\\s*\"\\s*)|(\\s*\"\\s*$)", "");
writer.write(line, 0, line.length());
writer.newLine();
}
} finally {
// 一定要记得释放资源
if(null != writer) {
writer.close();
}
if(null != reader) {
reader.close();
}
}
System.out.println(input.getAbsolutePath() + " ==> " + output.getAbsolutePath());
}
}