FileReader中使用read(char [] cbuf)方法读取数据 [Java]

FileReader中使用read(char [] cbuf)方法读取数据

read(char [] cbuf);

  • 读取文件中的数据,以字符为单位,每次读取cbuf数组长度个数据到我们的cbuf数组中,如果最后一次文件中剩余的未读取的数据不足装满这个数组,这个时候就默认从第一个位置(也就是索引为0的位置)开始替换,而数组中后面的几个元素没有替换,还是倒数第二次读取的数据
  • 返回每次读入cbuf数组中的字符的个数,如果达到文件末尾,返回-1;
  • 这个方法中的形参cbuf的含义就是"charbuffer",就是字符缓冲的意思
    • 因为我们使用read()方法一次读取一个字符的的话,我们要执行的循环次数太多了,所以我们就像可以使用一个缓冲区(其实就是一个char [] )先将一部分数据一次存储到这个缓冲区中,然后我们一次就可以使用这个缓冲区中的全部数据

eg:这里我们通过一个程序来理解read(char [] cbuf)方法的使用 ----这个例子中我们通过FileReader类来读取数据

package IO流.FileReader.读取数据;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Demo2 {
    //这里我们将异常抛出了,按理这个时候我们应该使用try -- catch --- finally,但是这个时候我们只是做一个测试,
    //我们就使用throws + 异常类型将异常对象抛出了
    public static void main(String[] args) throws IOException{

        /*
        File类的实例化
         */
        File file = new File("hi.txt");
        /*
        FileReader流的实例化
         */
        FileReader fileReader = new FileReader(file);
        /*
        创建缓冲数组
         */
        char [] chars = new char[5];
        /*
        创建一个临时变量存储每一次read()方法的返回值,因为最后一次读取的长度不一定等于数组的长度,这个时候
        我们就不可以遍历整个数组,这个时候我们只能遍历读取的元素个数个元素,而读取的元素个数又是read()方法的返回值
        所以我们使用的循环判断条件不能是缓冲数组的长度,而是read()方法返回值长度
         */
        int size= 0;
        /*
        读入的操作

        返回每次读入的cbuf数组中的字符的个数,如果达到文件末尾则返回01
         */
        //这里我们提供了两种遍历方式都可以使用
//        while((size = fileReader.read(chars)) != -1){
//            for (int i = 0; i < size; i++) {
//                System.out.println(chars[i]);
//            }
//        }
        while((size = fileReader.read(chars)) != -1){
            String str = new String(chars,0,size);
            System.out.print(str);
        }
        /*
        关闭流 --- 释放资源
         */
        fileReader.close();
    }
}

  • 注意: 这个时候我们只是为了做一个测试,所以这里我们使用throws + 异常类型将异常对象直接抛出了,这个方式是错误的,这个时候我们应该是使用try ---- catch ---- finally的方式来处理异常,将我们的关闭流的操作放到finally代码块中
    • 这个时候要注意,很可能我们还没有创建流对象就出现异常了,这个时候如果执行finally中的关闭流的操作就会出现一个空指针异常,所以这个时候我们最好进行一个if判断,如果流对象不为空再执行关闭流的操作
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值