FileReader类的read(char [] chars)方法使用的注意点 [Java]

本文通过示例详细讲解了Java中FileReader的read(char[])方法使用时的注意事项,特别是当缓冲数组长度与文件内容不匹配时,如何正确处理剩余数据并避免额外输出。示例代码展示了使用read方法返回值作为循环控制条件的重要性,确保正确输出文件内容。
摘要由CSDN通过智能技术生成

使用FileReader类的read(char [] chars)方法的注意点:

使用read(char [] chars)方法的时候注意点:

使用read(char [] chars)方法读取文件中的时候 — 如果这个时候我们的文件中有2从a - m一共十三个个英文字母,然后我们创建的缓冲数组chars的长度为5 ---- 这个时候我们每次就会读取五个英文字母并且将读取的五个英文字母装入到我们的缓冲数组中

第一次的时候我们的缓冲数组中的数据为:

|a,b,c,d,e|

第二次的时候我们的缓冲数组中的数据为:

|f,g,h,i,j|

第三次的时候我们的文件中的剩余为读取的元素剩余了3个,这个时候就会使用这三个元素替换缓冲数组中的前三个位置,这个时候缓冲数组中的后两个位置的元素还是 i 和 j

所以第三次的时候我们的缓冲数组中的数据为:

|k,l,m,i,j|

所以这个时候如果我们要输出我们的文件中的数据,这个时候我们就要输出数组中前三个元素----也就是输出我们每次读入到数组中的元素个数个

  • 如果这个时候输出的循环控制条件是数组长度的话,这个时候输出结果中的第三次输出就多了一个i 和 j
例题: 相对于本项目之下有一个文件hi.txt,这个文件中的内容为: abcdefghjklm ,一共是十三个元素

这里我们先举一个错误例子 — 使用数组长度作为循环控制条件(这个时候输出为: a b c d e f g h i j k l m i j ),这个时候我们可以发现末尾多了一个i 和 j

package IO流.FileReader.读取数据;

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

public class Demo3 {
    public static void main(String[] args) throws IOException{
        File file = new File("hi.txt");

        FileReader fileReader = new FileReader(file);

        char [] chars = new char[5];
        while(fileReader.read(chars)!=-1){
            /*
            这个时候使用的是chars.length作为循环控制条件,这个时候第三次我们读取到数组的时候读取的是[K,l,m]
            但是这个时候我们输出的时候却输出了五个元素,这个时候后两个元素就是上一次放进数组中的最后两个元素i和j
            
            所以: 这个时候我们应该是使用每一次的read(chars)方法的返回值作为循环控条件
            如果使用read(chars)方法返回值作为循环控制条件,这个时候第三次的时候我们读取了三个数据,输出的也就是三次
            也就是三个数据
             */
            for(int i = 0; i< chars.length ; i++){
                System.out.println(chars[i]);
            }
        }

        fileReader.close();


    }
}

这个时候我们再使用每次读取的实际元素个数作为循环控制条件,也就是使用read(char [] chars)方法的返回值作为循环控制条件----这个时候输出就是正确的

package IO流.FileReader.读取数据;

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

public class Demo4 {
    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()方法的返回值
        int size = 0;
        while ((size = fileReader.read(chars)) != -1){
            for(int i = 0 ; i< size ; i++){
                System.out.println(chars[i]);
            }
        }

        fileReader.close();
    }
}
  • 这个时候我们还是没有使用try ---- catch ---- finally来解决异常,这个时候我们主要是为了测试read(char[] cbuf)方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值