Skip to content

转换流


一、基本介绍

  • InputStreamReader:Reader 的子类,可以将 InputStream (字节流) 包装成 (转换) Reader (字符流)

  • OutputStreamWriter:Writer 的子类,实现将 OutputStream (字节流) 包装成 Writer (字符流)

  • 当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文问题,所以建议将字节流转换成字符

  • 可以在使用时指定编码格式 (比如 utf-8, gbk,gb2312, ISO8859-1 等)

应用场景

  • 读取文件时:指定读取文件内容的编码,解决文件乱码问题
  • 写入文件时:指定写入文件的编码

注意

  • 两个类都提供了带有指定文件编码的构造器,需要传入一个字符串
  • GBK 编码对应 txt 文件编码中的 ANSI 编码

二、InputStreamReader

应用:指定 gbk 编码读取文件内容

代码示例

java
public class newFile {
    public static void main(String[] args) throws IOException {
        String filePath = "C:\\Users\\jackson\\Desktop\\file.txt";
        // 首先使用转换流指定编码读取文件内容
        InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(filePath),"utf-8");
        // 使用 BufferedReader 读取文件内容
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

        // 一行流写法
        // BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath),"utf-8"););

        System.out.println("文件的内容是:" + bufferedReader.readLine());
        bufferedReader.close();
    }
}

代码分析

三、OutputStreamWriter

应用:指定 gbk 编码保存文件,并写入内容

java
public class newFile {
    public static void main(String[] args) throws IOException {
        String filePath = "C:\\Users\\jackson\\Desktop\\file.txt";
        // 首先使用转换流指定写入文件的编码
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(filePath),"utf-8");
        // 使用 BufferedWriter 写入内容到文件中
        BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);

        // 一行流写法
        // BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath),"utf-8"));

        bufferedWriter.write("写入内容");
        bufferedWriter.close();
    }
}