信息发布→ 登录 注册 退出

一起来学习Java IO的转化流

发布时间:2026-01-11

点击量:
目录
  • Java IO 转化流
    • 乱码引起转换流
      • 读取乱码
      • 转换流介绍
    • InputStreamReader
      • OutputStreamWriter
      • 总结

        Java IO 转化流

        乱码引起转换流

        读取乱码

        读取电脑磁盘上的Java.txt文件内容,文件路径: e:\Java\Java.txt,文件编码格式为 utf-8 。

        代码示例:

        import java.io.BufferedReader;
        import java.io.FileNotFoundException;
        import java.io.FileReader;
        import java.io.IOException;
         public class TestDemo {
            public static void main(String[] args) {
                BufferedReader bufferedReader = null;
                String filePath = "e:\\Java\\Java.txt";
                try {
                    bufferedReader = new BufferedReader(new FileReader(filePath));//创建字符处理流对象
                     String s = bufferedReader.readLine();//读取文件
                     System.out.println(s);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {//关闭处理流
                    try {
                        if (bufferedReader != null) {
                            bufferedReader.close();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        

        运行结果:将文件内容读取了出来。

        因为程序默认是以 utf-8 编码读取的,而此时Java.txt文件恰好是 utf-8 编码,所以可以将内容完整的读取出来。如果改变Java.txt文件的编码格式,读取结果会怎样呢?

        修改Java.txt 文件的编码格式为gbk,ANSI为国标码,根据电脑系统识别,当前电脑系统为gbk编码,所以将文件编码修改为ANSI编码即可。

        再次读取文件结果出现乱码

        因为程序默认以utf8编码格式读取文件,而此时文件编码为gbk,所以读取结果会产生乱码。

        如何解决这个问题?我们可以使用 转换流 来指定输入流的编码格式

        转换流介绍

        转换流有 InputStreamReader 和 OutputStreamWriter两种。

        1. InputStreamReader:Reader的子类,可以将InputStream(字节流)转换为Reader(字符流)

        2. OutputStreamWriter:Writer的子类,可以将OutputStream(字节流)转换为Writer (字符流)

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

        4. 可以在使用时指定编码格式(比如utf8,gbk等)

        InputStreamReader

        InputStreamReader类继承关系及构造函数

        InputStreamReaderReader的一个子类,它其中的构造函数InputStreamReader(InputStream,Charset)可以将一个字节输入流转换成字符输入流,同时通过Charset属性指定字符集编码。

        用转换流InputStreamReader再次读取上述示例中Java.txt文件,解决乱码问题。

        代码示例:

        import java.io.*;
         public class InputStreamReaderTest {
            public static void main(String[] args) throws IOException {
                String filePath = "e:\\Java\\Java.txt";
                 FileInputStream fileInputStream = new FileInputStream(filePath);
                //将字节输入流,转换为字符流 并指定编码格式为 utf8
                InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "gbk");
                 //将字符流转换为功能更加强大的字符处理流
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                 //读取内容
                String s = bufferedReader.readLine();
                System.out.println(s);
                 //关闭流
                bufferedReader.close();
            }
        }
         

        运行结果:

        内容读取成功~~~

        OutputStreamWriter

        OutputStreamWriter类继承关系及构造函数

        OutputStreamWriterWriter的一个子类,它其中的构造函数OutputStreamWriter(OutputStream,Charset)可以将一个字节输出流转换成字符输出流,同时通过Charset属性指定字符集编码。

        代码示例:

        编程将字节流 FileOutputStream 转换成字符流OutputStreamWriter,并在电脑磁盘上文件hello.txt文件中指定gbk编码格式写入“你好,Java!”,文件路径: e:\Java\hello.txt 。

        import java.io.*;
         public class OutputSteamWriterTest {
            public static void main(String[] args) throws IOException {
                String filePath = "e:\\Java\\hello.txt";
                 //将字节输出流转换为字符输出流
                OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(filePath), "gbk");
                 String content = "你好,Java!";
                 //将内容写进文件
                outputStreamWriter.write(content);
                 //关闭流
                outputStreamWriter.close();
                 System.out.println("保存成功~~~");
            }
        }
        

        运行结果:

        将内容写进了hello.txt文件。

        总结

        本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!

        在线客服
        服务热线

        服务热线

        4008888355

        微信咨询
        二维码
        返回顶部
        ×二维码

        截屏,微信识别二维码

        打开微信

        微信号已复制,请打开微信添加咨询详情!