Java IO 转化流

⭐写在前面⭐

🧭Java IO流学习
🎉 内容回顾
Java IO流介绍及文件操作
Java IO字节流
Java IO字符流
Java IO节点流和处理流
Java IO对象处理流以及序列化
Java IO RandomAccessFile
📢今天我们进行 Java IO 转换流 的学习,感谢你的阅读,内容若有不当之处,希望大家多多指正,一起进步!!!
♨️如果觉得博主文章还不错,可以👍三连支持⭐一下哦😀

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文件。
在这里插入图片描述

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WYSCODER

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值