首页 理论教育 二进制文件流

二进制文件流

时间:2022-02-28 理论教育 版权反馈
【摘要】:当生成文件输入流对象时,指定的文件将自动打开并与文件输入流建立连接。文件输入流从文件获得输入字节。若参数指定的文件找不到或不能打开,将产生FileNotFoundException异常。该异常是受检查异常,必须捕获或声明抛出。FileOutputStream类是OutputStream类的子类。文件输出流用于将字节数据写到指定的文件中。一般情况下,输出流字节将覆盖文件中原有的内容。同样,从类FileOutputStream的名字可以看出:Output是输出流;当前程序是数据源;File表明数据目的地是文件;Stream是一个字节流。

12.3.1 二进制文件流

FileInputStream类是InputStream类的子类。其构造方法中都有一个用于标识文件的参数(一般为文件路径名或文件对象)。当生成文件输入流对象时,指定的文件将自动打开并与文件输入流建立连接。文件输入流从文件获得输入字节。FileInputStream类的构造方法包括:

①FileInputStream(String name)throws FileNotFoundException;

②FileInputStream(File file)throws FileNotFoundException。

若参数指定的文件找不到或不能打开,将产生FileNotFoundException异常。该异常是受检查异常,必须捕获或声明抛出。

FileOutputStream类是OutputStream类的子类。其构造方法中都有一个用于标识文件的参数。文件输出流用于将字节数据写到指定的文件中。FileOutputStream类的构造方法包括:

①FileOutputStream(String name)throws FileNotFoundException;

②FileOutputStream(String name,boolean append)throws FileNotFound Exception;

③FileOutputStream(File file)throws IOException。

在生成文件输出流对象时,若指定的文件不存在,则创建一个新文件,否则将打开原有文件(一般为文件路径名或文件对象)。一般情况下,输出流字节将覆盖文件中原有的内容。若采用第2个构造方法并将append参数设置为true,那么输出流字节将添加至原有内容后面。

当出现下面情况时,构造方法将抛出FileNotFoundException或者IOException例外:

①指定的父目录路径不存在;

②在父目录路径已经存在一个同名的目录;

③由于某些原因不能创建新文件、或者指定的文件无法打开。

注意:

①从类FileInputStream的名字可以看出,Input表明是输入流,当前程序是数据的目的地;File表明数据源是文件;Stream表明是一个字节流,从流中读取的数据只能是以字节为单位的二进制数据,不能把这些比特信息转换成整数、字符、浮点数或字符串等复杂数据类型的量。同样,从类FileOutputStream的名字可以看出:Output是输出流;当前程序是数据源;File表明数据目的地是文件;Stream是一个字节流。

②FileInputStream类和FileOutputStream类的构造方法及其读写语句,都可能产生受检查异常,因此,构造方法及其读写语句要么在try-catch语句中,要么在包含该语句的方法上声明抛出异常。

【例12-5】 在终端上显示Ex12_5.java文件的内容,文件名通过命令行方式提供。

img696

程序运行结果:略(问题是汉字没有正确显示出来)。

分析与思考:①汉字没有正确显示出来的原因:fin.read()是以字节为单位读入的。不是字符流,不能将字节数据转换为16位的Unicode编码来表示汉字。

②fin.read()是以字节为单位读入,返回的却是int整型量。若返回-1,表明流结束。

③fin.close()可能产生的异常IOException,没有捕获但在main()方法上进行了声明。

④Ex12_5类是按输入输出流编程的一般步骤来编写的。

改写例12-5:使用available()和read(byte b[])方法,将Ex12_5.java文件的后一半内容读入到数组b中,并在终端上显示出来。

【例12-6】 在目录下建立文本文件my.txt,并从键盘上输入数据,写到文件中。

img697

程序运行结果:

请输入(以#号结束):I like learning Java.#

打开my.txt文件,查看文件内容,如图12-2所示。

img698

图12-2 my.txt文件内容

分析与思考:①write(int b)方法的参数是int类型,但向输出流写出却是一个字节。

②程序是在当前目录下创建myDir目录的。

改写例12-6:在例12-6基础上,①添加代码,完成从my.txt文件中读出数据,并打印在显示器上;②目录名和文件名改由从键盘输入。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈