15.4.5 使用文件字节输出流输出文件

“FileOutputStream”类与超类“OutputStream”类有点相似,其实“FileOutputStream”类就是“OutputStream”的子类,并且不是一个抽象类,这样就可以利用“FileOutputStream”类的对象来使用前面的方法。

下面看看如何构造一个“FileOutputStream”类的对象,必须要用到类的构造器。表15.4是“FileOutputStream”类的构造器种类。

15.4.5 使用文件字节输出流输出文件 - 图1

【实例15.6】下面将通过一个有关输出流对象的实例,熟悉它的用法。


01 import java.io.*;

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

03 ///创建一个文件输出流对象fos

04 ///使用循环语句往f中写入数据

05 public class file5

06 {

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

08 {

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

10 FileOutputStream fos=new FileOutputStream(f);

11 for(int i=’a’;i<=’z’;i++)

12 {

13 fos.write(i);

14 }

15 fos.close();

16 }

17 }


【代码说明】第9行创建目标对象,不管file.txt中有没有内容。第10行创建输出流对象fos,第11~14行输出26个小写的英文字母。

【运行效果】没有运行结果,但在file.txt中发现了刚才程序自动输入的数据,是26个小写的英文字母。

15.4.5 使用文件字节输出流输出文件 - 图2

图 15.2 数据输出流模拟图

图15.2演示了输出流操作数据的过程。

【实例15.7】下面演示如何将输入流和输出流结合在一起使用。


01 import java.io.*;

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

03 ///创建一个文件类对象f1

04 ///创建一个文件输入流对象fis

05 ///创建一个文件输出流对象fos

06 ///使用字节数组将f中的数据读出

07 ///使用循环语句将字节数组中的数据往f中写

08 public class file6

09 {

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

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

12 File f1=new File("d:\filetest\file2.txt");

13 FileInputStream fis=new FileInputStream(f);

14 FileOutputStream fos=new FileOutputStream(f1);

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

16 fis.read(b);

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

18 {

19 fos.write(b[i]);

20 }

21 fis.close();

22 fos.close();

23 }

24 }


【代码说明】第13行创建的是输入流对象,从file.txt中读取数据。第14行创建的是输出流对象,往file2.txt中输出对象。第21~22行关闭输入流和输出流。

【运行效果】上面程序最后的结果就是,在新建的文本文件“file2.txt”中,输入了从文本文件“file.txt”中读取的数据。运行步骤是,先利用输入流从目标对象中读取数据,再利用输出流对象将这些数据写到新的目标对象中。下面通过模拟图15.3,让读者对上一个程序的运行过程看得更清晰。

15.4.5 使用文件字节输出流输出文件 - 图3

图 15.3 输入流和输出流模拟图