JAVA IO流文本文件读入方法(read方法读入数据)

本文详细介绍了Java中FileReader的read()和read(char[] cbuf)方法的使用,通过示例代码展示了两种方法在读取文件内容时的不同行为。read()方法每次读取一个字符,而read(char[] cbuf)一次性读取多个字符到字符数组中。在使用read(char[] cbuf)时,需要注意循环条件的设置,以避免输出错误或无限循环的问题。
摘要由CSDN通过智能技术生成

在字符流通常都使用read方法读入数据,而read方法一般都两种调用方式。

首先先创建一个文件,如Hello.txt,里面输入HelloWorld!

第一种是使用read的空参调用:read()

  read()从输入流中读入一个字符,若当前位置无数据则返回-1

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

public class textFileReader1 {
    public static void main(String[] args) throws IOException {

        //1.File类的实例化
        //在main中要用绝对路径
        File file = new File("D:\\Hello.txt");

        //2.FileReader流的实例化
        FileReader fr = new FileReader(file);

        //3.数据读入
        int data1 = fr.read();   //从输入流中读入一个字符,若当前位置无数据则返回-1
        System.out.println("用read()输出: ");
        while(data1 != -1){
            System.out.print((char) data1);
            data1 = fr.read();
        }
        //4.流的关闭
        fr.close();
    }

}

输出结果:

第二种是使用read的有参调用:read(char[]  cbuf)

read(char[]  cbuf)是最多读入cbuf.length个字符,若当前位置无数据则返回-1

//这是伪代码,框架和read()一致
//3.数据读入
System.out.println("用read(char[] cbuf)输出: ");
        char[] cbuf = new char[5] ;
        int data2;
        while((data2 = fr.read(cbuf)) != -1){
            // 第一种输出
/*            String str = new String(cbuf,0,data2);
            System.out.print(str);*/

            //第二种输出
            for (int i = 0; i < data2; i++) {
                System.out.print(cbuf[i]);
            }
        }

输出结果:

在学习read(char[]  cbuf)方法的过程中发现了一点问题:

1.如果将i的截止条件换成cbuf.length,则输出结果就不能达到预期效果

        char[] cbuf = new char[5] ;
        int data2;
        while((data2 = fr.read(cbuf)) != -1){
            for (int i = 0; i < cbuf.length; i++) {
                System.out.print(cbuf[i]);
            }
        }

输出结果:

这是因为首先第一次读入Hello这5个字符然后输出(如下图),第二次读入World输出,第三次则是第二次读入的数据的第一个位置替换成!,也就是将!读入到cbuf[0]的位置,剩下数据则是orld(如图)。而如果i截止到cbuf.length则是将整个读入的数据输出也就是输出HelloWorld!orld。

2.如果我们以下这样实现方法,则会出现一直循环Hello

        char[] cbuf = new char[5];
        int data2 = fr.read(cbuf);
        while(data2 != -1){
            for (int i = 0; i < data2; i++) {
                System.out.print(cbuf[i]);
            }
        }

输出结果:

这是因为data2读入的只是Hello,然后进入到for循环,输出Hello,而data2一直不等于-1就陷入了死循环,则一直输出Hello。

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值