import sun.nio.cs.ext.GBK;
import java.io.*;
import java.nio.channels.FileChannel;
import java.nio.charset.StandardCharsets;
/**
* 将GBK 编码转变成 UTF-8
* <p>
* 思路,
* 1. 创建一个GBK 格式 的 TXT
* 2. 读取一个 GBK 格式的 txt
* 3. 读取后 以 UTF - 8 格式 输出 一个 TXT
*/
public class GBKToUTF {
public static void main(String[] args) throws IOException {
long start = System.currentTimeMillis();
// 创建 一个 GB2312 的 文本文件
final FileOutputStream fos2 = new FileOutputStream(new File("newGBK.txt"), true);
final OutputStreamWriter osw2 = new OutputStreamWriter(fos2, "GB2312");
osw2.write("《静夜思》\r\n");
osw2.write("--唐 李白\r\n");
osw2.write("床前明月光。\r\n");
osw2.write("疑是地上霜。\r\n");
osw2.write("举头望明月,\r\n");
osw2.write("低头思故乡。\r\n");
osw2.close();
// 1.读取一个GB2312的文本文件
final FileInputStream fis = new FileInputStream("newGBK.txt");
final InputStreamReader isr = new InputStreamReader(fis, "GB2312");
// 2.准备一个输出对象
final FileOutputStream fos = new FileOutputStream("1216UTF_8.txt", true);
final OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8);
// 3.1 通过字节 一个一个读取文件
/*
int len = 0;
while ((len = isr.read()) != -1) {
// System.out.print((char)len);
osw.write(len);
}
*/
// 快了 1 ms ????????????????????????????????????????
// 希望对你有帮助啊...................................
// 借助缓冲区 提高访问速度
BufferedReader bR = new BufferedReader(isr);
BufferedWriter bW = new BufferedWriter(osw);
// 3.2 第二种方式
int len = 0;
char[] chars = new char[10];
while ((len = bR.read(chars)) != -1) {
// System.out.print((char)len);
bW.write(chars,0,len);
}
// 读取失败...
/*byte[] bytes = new byte[1024];
int len = 0;
while ((len = isr.read(bytes)) != -1) {
osw.write(new String(bytes, 0, len));
}*/
/*final FileChannel channel = fis.getChannel();
System.out.println(channel);
// sun.nio.ch.FileChannelImpl@1b6d3586
final Class<? extends FileInputStream> aClass = fis.getClass();
System.out.println(aClass);
// class java.io.FileInputStream
final String encoding = osw.getEncoding();
System.out.println(encoding);
// UTF8
final String encoding1 = isr.getEncoding();
System.out.println(encoding1);
// EUC_CN
final Class<? extends OutputStreamWriter> aClass1 = osw.getClass();
System.out.println(aClass1);
// class java.io.OutputStreamWriter*/
osw.close();
fos.close();
isr.close();
fis.close();
long end = System.currentTimeMillis();
System.out.println("执行完毕所耗费的时间: " + (end - start) + " ms");
}
}
Java File 操作,将GBK 编码转变成 UTF-8
最新推荐文章于 2024-06-30 03:13:32 发布