15.6.4 读取带缓存的BufferedReader字符流
通过上面的叙述知道,“Reader”类本身不可能创建对象,因为它是抽象类,那么可以通过子类覆盖这个抽象类中的抽象方法,这称为非抽象类。非抽象类就可以创建对象。这个抽象类可以形成两个类:“InputStreamReader”和“BufferedReader”两个类。
【实例15.13】“InputStreamReader”类比较简单,通过一个实例来掌握该如何使用它。实例代码如下。
01 import java.io.*;
02 ///创建一个文件类对象f
03 ///创建一个输入流对象fis,并且以f作为参数
04 ///创建一个字符输入流对象isr,并且以fis作为参数
05 ///将读出的数据放入字符st中
06 ///再将字符输出
07 public class file12
08 {
09 public static void main(String[]args)throws Exception
10 {
11 File f=new File("d:\filetest\2.txt");
12 FileInputStream fis=new FileInputStream(f);
13 InputStreamReader isr=new InputStreamReader(fis);
14 char st=(char)isr.read();
15 System.out.println(st);
16 }
17 }
【代码说明】第14行将文本中的字符读取出来,但它一次只能读一个字符。
【运行效果】这是读取2.txt中的内容,读者可在此文本中输入几个字符进行测试。
“BufferedReader”类是继承“Reader”类的子类,其在内部有缓冲机制,所以可以以行为单位进行输入工作。它的工作原理如图15.6所示。
图 15.6 BufferedReader类模拟图
从图15.6可以看出,先从文件中以字节形式读取数据,然后将数据组合成字符型数据,最后将所有读取的数据缓存起来一起输出。这个类的常用方法如下:
public String readLine();
【实例15.14】下面举一个有关BufferedReader类的实例。
01 import java.io.*;
02 ///创建一个文件类对象f
03 ///创建一个输入流对象fis,并且以f作为参数
04 ///创建一个字符输入流对象isr,并且以fis作为参数
05 ///创建一个带缓冲的输入流对象,利用此对象读取一行数据
06 public class file13
07 {
08 public static void main(String[]args)throws Exception
09 {
10 File f=new File("d:\filetest","2.txt");
11 FileInputStream fis=new FileInputStream(f);
12 InputStreamReader isr=new InputStreamReader(fis);
13 BufferedReader br=new BufferedReader(isr);
14 System.out.println(br.readLine());
15 System.out.println(br.readLine());
16 }
17 }
【代码说明】第14~15行表示读取2.txt的前两行数据,readLine()方法每次读取一行数据。2.txt中的数据读者可自己添加几行。
【运行效果】
one line
two line
上述代码可以读取大量的数据,比前面的类读取数据要容易得多。