本文介绍怎样利用 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()); } }