Java IO 解决字符编码乱码的问题的类InputStreamReader ,OutputStreamWriter 使用教程.

解决字符编码的问题的读写类

例子1.创建一个指定UTF-8的txt,然后用GBK和UTF-8依次读取测试:

package Java学习.Java高级.IO.编码格式转换流InputStreamReader.指定编码的读写;

import java.io.*;
import java.nio.charset.StandardCharsets;

/**
 * 一、.写 OutputStreamWriter 继承 Writer(只是构造不同)----------
 * 1.构造 1.
 * OutputStreamWriter(OutputStream out)
 * 创建一个使用默认字符编码的OutputStreamWriter。
 * 2,构造2 .指定
 * OutputStreamWriter(OutputStream out, String charsetName)
 * 创建一个使用命名字符集的OutputStreamWriter。
 * 二、读取: 和一、一致
 *1.构造第一个参数为 InputStreamReader ,第二个参数为 String类型的字符编码名称.
 * ---------------------------------
 * 三、本类目的
 * @创建一个指定UTF-8的txt,然后用GBK和UTF-8依次读取测试:
 *
 */
public class Main {
    public static void main(String[] args) throws IOException {
        //创建一个utf-8 的文件
        String url = "D:\\Program Files\\JetBrains\\test1\\Lab\\src\\Java" +
                "学习\\Java高级\\IO\\编码格式转" +
                "换流InputStreamReader\\指定编码的读写\\";
        FileOutputStream fileOutputStream = new FileOutputStream(url + "嫌疑人.txt");
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8);
        outputStreamWriter.write("张三 李四 王五");
        outputStreamWriter.flush();
        outputStreamWriter.close();
        fileOutputStream.close();
        System.out.println("-------1.utf-8类型的txt定义成功-----");
        //使用指定的utf-8 来读取
        System.out.println("---------2.使用指定的utf-8 来读取——--------");
        FileInputStream fileInputStream = new FileInputStream(url + "嫌疑人.txt");
        InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"GBK");
        char[] chars = new char[1024*100];
        int length;
        while ((length = inputStreamReader.read(chars,0,chars.length))!=-1){
            System.out.println("GBK读取的嫌疑人:"+ new String(chars,0,length));
        }
        inputStreamReader.close();
        System.out.println("--------3.使用utf-8来读取-----------");
        FileInputStream fileInputStream1 = new FileInputStream(url + "嫌疑人.txt");
        InputStreamReader inputStreamReader1 = new InputStreamReader(fileInputStream1, StandardCharsets.UTF_8);
        int length2;
        while ((length2 = inputStreamReader1.read(chars,0,chars.length)) != -1){
            System.out.println("utf-8读取的嫌疑人:"+new String(chars,0,length2));
        }


    }
}

Run:
-------1.utf-8类型的txt定义成功-----
---------2.使用指定的utf-8 来读取——--------
GBK读取的嫌疑人:寮犱笁 鏉庡洓 鐜嬩簲
--------3.使用utf-8来读取-----------
utf-8读取的嫌疑人:张三 李四 王五

Process finished with exit code 0
在这里插入图片描述

例子2.新创建GBK字符文件,把GBK的文件转化为UTF8的文件

package Java学习.Java高级.IO.编码格式转换流InputStreamReader.练习吧GBK的文件转化为UTF8的文件;

import java.io.*;
import java.nio.charset.StandardCharsets;

/**
 * 练习:
 * 新创建GBK字符文件,转化练习吧GBK的文件转化为UTF8的文件
 * 一、转换;
 * new GBK 的读取
 * new utf-8写入
 * 读取后写入.
 *
 */
public class Main {
    public static void main(String[] args) throws IOException {
        //新创建GBK字符文件
        String url = "D:\\Program Files\\JetBrains\\test1\\Lab\\src\\Java学习\\Java高级\\IO\\编码" +
                "格式转换流InputStreamReader\\练习吧GBK的文件" +
                "转化为UTF8的文件\\";
        FileOutputStream fileOutputStream = new FileOutputStream(url + "GBK嫌疑人.txt");
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "GBK");
        outputStreamWriter.write("张三 李四 王五");
        outputStreamWriter.flush();
        outputStreamWriter.close();
        fileOutputStream.close();
       // * 一、转换;
        // * new GBK 的读取
        // * new utf-8写入
        // * 读取后写入.
        InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(url + "GBK嫌疑人.txt"), "GBK");
        OutputStreamWriter outputStreamWriter1 = new OutputStreamWriter(new FileOutputStream(url + "转换后utf-8的嫌疑人.txt"), StandardCharsets.UTF_8);
        char[] chars = new char[1024*10];
        int length ;
        while ((length = inputStreamReader.read(chars,0,chars.length))!=-1){
            String string = new String(chars,0,length);
        outputStreamWriter1.write(string);
    }
        outputStreamWriter1.flush();
        outputStreamWriter1.close();
        inputStreamReader.close();



}
}

Run:
(idea 现在的编码为utf-8 识别不了 GBK)
在这里插入图片描述
在这里插入图片描述

原创文章 132 获赞 11 访问量 4708

猜你喜欢

转载自blog.csdn.net/jarvan5/article/details/106006351