Java基础00-处理流之二:转换流

一:基本概述

1、引入情况

① FileReader 读取文本文件和Windows系统中创建的文本文件默认编码不同,读入内存中会出现乱码。

② 针对文本文件,使用一个字节流进行数据的读入,希望将数据显示在控制台上,此时针对包含中文的文本数据,可能会出现乱码。

2、转换流的理解

转换流是字符与字节之间的桥梁。

二、InputStreamReader和OutputStreamWriter

1、InputStreamReader

- java.io.inputStreamReader

 转换流java.io.InputStreamReader,是Reader子类,是从字节流到字符流的桥梁。它读取字节,并使用指定的字符集将其解码为字符。其字符集可以由名称指定,也可以接受平台的默认字符集。

- 构造器

① InputStreamReader(InputStream in): 创建一个使用默认字符集的字符流;

InputStreamReader isr1 = new InputStreamReadaer(new FileInputStream("in.txt"))

② InputStreamReader(InputStream in,String charsetName): 创建一个指定字符集的字符流;

InputStreamReader isr2 = new InputStreamReader(new FileInputStream("in.txt","GBK"))

- 示例代码

package IO.SwitchStream.InputStreamTest;
import java.io.FilenameFilter;
import java.io.InputStreamReader;
import java.io.*;
public class InputOutStreamTest {
    public static void main(String[] args)throws IOException {
        String fileName = "D:\\2024TianYuShiJie\\2024TianYuDataSource\\20241118资源\\gbk.txt";
        //方式1:创建流对象,默认为UTF8编码
        InputStreamReader isr1 = new InputStreamReader(new FileInputStream(fileName));
        int charData;
        while ((charData = isr1.read()) != -1){
            System.out.println((char)charData);
        }
        isr1.close();
        int charDataOne;
        //方式2:
        //创建流对象,指定GBK编码
        InputStreamReader isr2 = new InputStreamReader(new FileInputStream(fileName),"GBK");

        while ((charDataOne = isr2.read()) != -1){
            System.out.println((char)charDataOne);
        }
        isr2.close();
    }
}

2、OutputStreamWriter

- java.io.OutputStreamWriter

其是Writer的子类,是从字符流到字节流的桥梁。使用指定的字符集将字符编码为字节。其字符集可以由名称指定,也可以接受平台默认的字符集。

- 构造器

 ① OutputStreamWriter(OutputStream in): 创建一个使用默认字符集的字符流;

OutputStreamWriter isr = new OutputStreamWriter(new FileOutputStream("out.txt"))

 ② OutputStreamWriter(OutputStream in,String charsetName): 创建一个指定的字符集的字符流

OutputStreamWriter isr2 = new OutputStreamWriter(new FileOutputStream("out.txt"),"GBK")

- 示例代码

package IO.SwitchStream.InputStreamTest;
import java.io.*;
public class OutputStreamTest {
    public static void main(String[] args)throws IOException {
        String fileName = "D:\\2024TianYuShiJie\\2024TianYuDataSource\\20241118资源\\gbk.txt";
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(fileName));
        osw.write("你好");
        osw.close();

        String fileName2 = "D:\\2024TianYuShiJie\\2024TianYuDataSource\\20241118资源\\gbk.txt";
        OutputStreamWriter osw2 = new OutputStreamWriter(new FileOutputStream(fileName2),"GBK");
        osw2.write("万事大吉");
        osw2.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值