Java中分别用字节流和字符流去读取文件中的中文

文章介绍了如何使用Java的字节流和字符流读取UTF-8编码的文本文件。字节流读取时,中文字符会被编码为3个字节,而字符流则直接处理字符。在不同编码环境下,需注意设置正确的编码方式,如GBK,以避免乱码问题。
摘要由CSDN通过智能技术生成

1.字节流读取
首先我们先创建一个文本文档,在里面输入一行中文:
在这里插入图片描述接下来在代码中创建字节输入流读取文本文档中的内容,该文档用UTF-8的编码形式保存的:

File file = new File("D:\\桌面\\IDEA实验室\\读取.txt");
        FileInputStream fis = new FileInputStream(file);
        byte[] a = new byte[(int)file.length()];
        try {
            fis.read(a);
            fis.close();

我们都知道Java肯定是不能把中文之间存储到内存当中的,计算机也看不懂中文,由于文档保存形式是UTF-8,所以读取时一个中文字就会被编码成三个字节,全读取到字节数组中就有18个字节,遍历一下将这些数组元素输出,得到的结果如下:
在这里插入图片描述共18个数字,每个数字都相当于是一个字节。
(tips:字节的取值范围是-128到127,我们用字节流读取的中文都以字节形式存储在字节数组中)
最后如果想要输出文档中的汉字的话,我们把字节数组以UTF-8编码方式去解码,我们就可以通过这些数字的到相应的汉字,我们通过创建一个字符串对象接收字节数组和编码方式,再直接输出该变量名。
(tips:如果你的编译器默认的编码方式就是UTF-8,可以不用指定编码方式,只接收数组这一参数即可,如String s = new String(a);
我们可以通过输出Charset.defaultCharset()看默认编码方式。

String s = new String(a,"UTF-8");
            System.out.println(s);

输出结果:在这里插入图片描述

2.字符流读取
创建一个字符流,访问的是上面内容的同一个文档:

 FileReader fr = new FileReader(file);
        char[] a = new char[(int) file.length()];
        try {
            fr.read(a);
            fr.close();

这里创建的是字符数组去接收这些读取过来的中文字符,然后同样的创建字符串对象接收字符数组a,最后输出字符串变量名:

   String s = new String(a);
   System.out.println(s);

输出结果:
在这里插入图片描述字符流FileReader是不能手动设置编码方式的,这里能输出是因为文档是以UTF-8的编码方式保存的,编译器也是默认UTF-8的编码方式,当文档为别的编码方式(如GBK) 保存时,编译时要更改编译器的编码方式,要使用另一种字符流InputStreamReader来代替,如下

InputStreamReader isr = new InputStreamReader(new FileInputStream(file),Charset.forName("GBK"))

tips:字符流读取文档到字符数组中,如果我们用(int) file.length()来确定数组长度,六个汉字就占18个字节,所以数组长度确定为了18,而存储这六个汉字只需要数组长度为6就可以了,多出来的12在输出时会显示null。

再加一点:文件的编码保存形式在另存为中可以更改
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值