JAVA I/O小结(五)——字符流输入输出

JAVA I/O小结(五)——字符流输入输出

看此篇博文前推荐看看这篇几篇,有助于了解File类的各种方法和字节流操作与算法
传送门:
JAVA I/O小结(一)——File类
JAVA I/O小结(二)——File类的递归遍历
JAVA I/O小结(三)——字节流输入输出
JAVA I/O小结(四)——字节流方式实现复制操作

I/O的分类

根据数据的流向区分:输入流输出流
根据数据的类型区分:字节流(8bit)字符流(16bit)

由此可得出如下表格:

 字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter

在这章就主要讲解下字符流的输入输出

注意1:对I/O进行操作需要进行异常的抛出或者跳过,使用“throws”或者“try-catch”来处理异常
注意2:使用完I/O流后一定要关闭I/O流,遵循先开后关,后开先关的原则


当我们使用字节流来读取文本文件时,很容易遇到的问题是当文本中数据为中文字符,若读取存放的数组空间不够,可能不会显示完整的字符或出现乱码,那是因为一个中文字符可能占用多个字节存储。所以JAVA提供了字符流类,以字符为单位读写数据,专门用于处理文本文件。

字符流输入Reader

这里的输入,是指从硬盘里的文件输入到内存中。可以理解为从文件中将数据输入到代码里,是文件对代码的输入

这里使用之前的test123.txt文件进行演示

具体操作代码如下:

try {
                FileReader in = new FileReader("./test123.txt");//指定从test123输入数据

                char ch[] = new char[4];//创建临时存放数据的字符数组
                int len = 0;//定义一个输入流的读取长度
                while((len = in.read(ch)) != -1){
                    System.out.println(new String(ch,0,len));
                }

                in.close();//使用完一定要关闭流
            } catch (Exception e) { //因为异常很多,所以用Exception
                e.printStackTrace();
            }

结果:
Reader
由代码可以看出,字符流的输入操作逻辑与字节流相似,区别只有临时存放数据的数组不同:

 字节流字符流
输入流临时存储byte[]char[]

且由于字符流是按照字符来读取文件数据的,所以这里只用开辟4位数组空间即可存放。若将数组空间改为2,则输出结果为
Reader2

字符流输出Writer

这里的输出,是指从内存输出到硬盘里的文件中。可以理解为从代码中将数据输出到文件里,是代码对文件的输出

具体操作代码如下:

try {
                FileWriter out = new FileWriter("./test123.txt");//指定从test123输出数据

                out.write("乌拉!!!");//写到内存中
                out.flush();//把内存的数据刷到硬盘

                out.close();//使用完一定要关闭流
            } catch (Exception e) { //因为异常很多,所以用Exception
                e.printStackTrace();
            }

结果:

在这里插入图片描述
代码的具体逻辑还是与字节流输出相同,文件中原本的阿巴阿巴被修改为乌拉!!!


如有问题欢迎指正

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值