• IO流 之 转换流( InputStreamReader 字节输入转换流 和 OutputStreamWriter 字节输出转换流)


    在这里插入图片描述
    文本文件和代码的编码不一致时,使用字符流会导致读取出来的文字乱码。如下:

    在这里插入图片描述
    读取文件的编码时GBK编码。
    在这里插入图片描述
    代码的编码时UTF-8的编码。
    在这里插入图片描述
    程序运行出来中文则是乱码。

    这里就要使用到转换流了。
    在这里插入图片描述

    字节转换流

    InputStreamReader 字节输入转换流

    在这里插入图片描述
    使用步骤

    1. 获取原始字节流
    2. 使用字节转换流转换
    3. 再转换为缓冲字符流

    之后使用缓冲字符流readLine()方法读取.

    package day0927;
    
    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.FileReader;
    import java.io.InputStreamReader;
    
    public class demo12 {
        public static void main(String[] args) {
            try (
                    //获取原始字节流
                    FileInputStream fis = new FileInputStream("src/e.txt");
                    //使用字节转换流转换
                    InputStreamReader isr = new InputStreamReader(fis,"GBK");
                    //再转换为缓冲字符流
                    BufferedReader bf = new BufferedReader(isr)
            ){
                String line;
    
                while (  (line=bf.readLine())!=null){
                    System.out.println(line);
                }
            }catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    OutputStreamWriter 字节输出转换流

    在这里插入图片描述
    在这里插入图片描述
    接下来的代码示例,是从一个UTF-8编码的文件读取字符之后,输出到一个GBK编码的文件中。

    package day0927;
    import java.io.*;
    
    public class demo12 {
        public static void main(String[] args) {
            try (
                    //获取原始字节流
                    FileReader fis = new FileReader("src/a.txt");
                    //再转换为缓冲字符流
                    BufferedReader bf = new BufferedReader(fis);
    
                    //获取原始字节输出流
                    OutputStream os = new FileOutputStream("src/e.txt",true);
                    //字节转换输出流将原始流转换为GBK编码
                    OutputStreamWriter gbk = new OutputStreamWriter(os,"GBK");
                    //转换为缓冲字符输出流
                    BufferedWriter bw = new BufferedWriter(gbk);
            ){
                String line;
                while (  (line=bf.readLine())!=null){
                    System.out.println(line);
                    //写入字符
                    bw.write(line);
                    //换行
                    bw.newLine();
                }
            }catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
  • 相关阅读:
    Windows11搭建FTP服务器后,无法访问,提示:ftp: connect :连接超时
    修改Windows环境变量
    python的前缀树(字典树)
    获取地图的json数据
    淘宝/天猫API:item_password-获得淘口令真实url
    JL100-P100防护型拉线式位移编码器
    计算机毕业设计ssm宠物寄养管理系统41n70系统+程序+源码+lw+远程部署
    【案例】由coredump引起的思考:程序的加载流程
    C# 判断值是否在枚举里
    第四节唯物辩证法(两大总特征)
  • 原文地址:https://blog.csdn.net/weixin_72979483/article/details/133517434