15.4.4 使用文件字节输入流读取文件

“FileInputStream”类与前面说过的“InputStream”类有点相似,其实“FileInputStream”类就是“InputStream”的子类,并且其不是一个抽象类。这样,程序员就可以利用“FileInputStream”类的对象来使用前面的方法。

下面先看如何构造一个“FileInputStream”类的对象,这需要用到类的构造器。下面是“FileInputStream”类的构造器种类。

public FileInputStream(String name):创建一个FileInputStream对象,从以name为名称的文件名称中读取数据。

public FileInputStream(File file):创建一个FileInputStream对象。从指定的对象file中读取数据。

【实例15.4】先看一个有关“FileInputStream”类的实例。


01 import java.io.*;

02 ///创建一个文件类f

03 ///创建一个输入流对象fis,并且以f作为参数

04 ///使用循环语句将文本文件中的字符读出

05 public class file3

06 {

07 public static void main(String[]args)throws Exception

08 {

09 File f=new File("d:\filetest\file.txt");

10 FileInputStream fis=new FileInputStream(f);

11 char ch;

12 for(int i=0;i<f.length();i++)

13 {

14 ch=(char)fis.read();

15 System.out.print(ch);

16 }

17 fis.close();

18 }

19 }


【代码说明】仔细分析上面的程序段,第9行建立一个目标对象,这里的目标对象是一个记事本文件。接着第10行建立一个输入流对象,利用这个输入流对象的“read()”方法,读取目标对象中的数据,最后第17行将这个流关闭。由于是读数据,所以这个目标对象必须已经存在。这个过程可以使用一个图来表示,如图15.1所示。

15.4.4 使用文件字节输入流读取文件 - 图1

图 15.1 数据输入流模拟图

【运行效果】


addbcnhhvbvbbvnbvncxzxvdfhhtrrgregfdsgdsfdhjxccbnh


说明 读者机器上如果没有file.txt文件,则会报错。先手动创建此文件,文件内容与上述结果相同。

【实例15.5】下面再看一个有关输入流对象的实例。


01 import java.io.*;

02 ///创建一个文件类f

03 ///创建一个输入流对象fis,并且以f作为参数

04 ///将所有的字节都保存到一个字节数组b中

05 ///使用循环语句将b中的字符读出

06 public class file4

07 {

08 public static void main(String[]args)throws Exception

09 {

10 File f=new File("d:\filetest\file.txt");

11 FileInputStream fis=new FileInputStream(f);

12 byte[]b=new byte[(int)f.length()];

13 fis.read(b);

14 for(int i=0;i<f.length();i++)

15 {

16 System.out.print((char)b[i]);

17 }

18 fis.close();

19 }

20 }


【代码说明】第10行创建一个目标对象,其是file.txt文件,第11行创建一个读取数据流对象fis,第13行开始读取目标对象的数据。不要忘记第18行关闭读取流。

【运行效果】


addbcnhhvbvbbvnbvncxzxvdfhhtrrgregfdsgdsfdhjxccbnh