File类 读取文件

来源:互联网 发布:win10中的keeper软件 编辑:程序博客网 时间:2024/06/03 18:03

基本的输出流包含OutputStreamWriter两个,区别是OutputStream体系中的类(也就是OutputStream的子类)是按照字节写入的,而Writer体系中的类(也就是Writer的子类)是按照字符写入的。

         使用输出流进行编程的步骤是:

                   1、建立输出流

                            建立对应的输出流对象,也就是完成由流对象到外部数据源之间的转换。

                   2、向流中写入数据

                            将需要输出的数据,调用对应的write方法写入到流对象中。

                   3、关闭输出流

                            在写入完毕以后,调用流对象的close方法关闭输出流,释放资源。

         在使用输出流向外部输出数据时,程序员只需要将数据写入流对象即可,底层的API实现将流对象中的内容写入外部数据源,这个写入的过程对于程序员来说是透明的,不需要专门书写代码实现。

         在向文件中输出数据,也就是写文件时,使用对应的文件输出流,包括FileOutputStreamFileWriter两个类,下面以FileOutputStream为例子说明输出流的使用。示例代码如下:

   

import java.io.*;/** * 使用FileOutputStream写文件示例 */public class WriteFile1 {         public static void main(String[] args) {                   String s = "Java语言";                   int n = 100;                   //声明流对象                   FileOutputStream fos = null;                   try{                            //创建流对象                            fos = new FileOutputStream("e:\\out.txt");                            //转换为byte数组                            byte[] b1 = s.getBytes();                            //换行符                            byte[] b2 = "\r\n".getBytes();                            byte[] b3 = String.valueOf(n).getBytes();                            //依次写入文件                            fos.write(b1);                            fos.write(b2);                            fos.write(b3);                   } catch (Exception e) {                            e.printStackTrace();                   }finally{                            try{                                     fos.close();                            }catch(Exception e){}                   }         }}

该示例代码写入的文件使用记事本打开以后,内容为:

                   Java语言

100

         在该示例代码中,演示了将一个字符串和一个int类型的值依次写入到同一个文件中。在写入文件时,首先创建了一个文件输出流对象fos

                   fos = new FileOutputStream("e:\\out.txt");

         该对象创建以后,就实现了从流到外部数据源e:\out.txt的连接。说明:当外部文件不存在时,系统会自动创建该文件,但是如果文件路径中包含未创建的目录时将出现异常。这里书写的文件路径可以是绝对路径也可以是相对路径。

         在 实际写入文件时,有两种写入文件的方式:覆盖和追加。其中“覆盖”是指清除原文件的内容,写入新的内容,默认采用该种形式写文件,“追加”是指在已有文件 的末尾写入内容,保留原来的文件内容,例如写日志文件时,一般采用追加。在实际使用时可以根据需要采用适合的形式,可以使用:

                   public FileOutputStream(String name, boolean append) throws FileNotFoundException

         只需要使用该构造方法在构造FileOutputStream对象时,将第二个参数append的值设置为true即可。

         流对象创建完成以后,就可以使用OutputStream中提供的wirte方法向流中依次写入数据了。最基本的写入方法只支持byte数组格式的数据,所以如果需要将内容写入文件,则需要把对应的内容首先转换为byte数组。

         这里以如下格式写入数据:首先写入字符串s,使用String类的getBytes方法将该字符串转换为byte数组,然后写入字符串“\r\n”,转换方式同上,该字符串的作用是实现文本文件的换行显示,最后写入int数据n,首先将n转换为字符串,再转换为byte数组。这种写入数据的顺序以及转换为byte数组的方式就是流的数据格式,也就是该文件的格式。因为这里写的都是文本文件,所以写入的内容以明文的形式显示出来,也可以根据自己需要存储的数据设定特定的文件格式。

         其实,所有的数据文件,包括图片文件、声音文件等等,都是以一定的数据格式存储数据的,在保存该文件时,将需要保存的数据按照该文件的数据格式依次写入即可,而在打开该文件时,将读取到的数据按照该文件的格式解析成对应的逻辑即可。

         最后,在数据写入到流内部以后,如果需要立即将写入流内部的数据强制输出到外部的数据源,则可以使用流对象的flush方法实现。如果不需要强制输出,则只需要在写入结束以后,关闭流对象即可。在关闭流对象时,系统首先将流中未输出到数据源中的数据强制输出,然后再释放该流对象占用的内存空间。

         使用FileWriter写入文件时,步骤和创建流对象的操作都和该示例代码一致,只是在转换数据时,需要将写入的数据转换为char数组,对于字符串来说,可以使用String中的toCharArray方法实现转换,然后按照文件格式写入数据即可。

         对于其它类型的字节输出流/字符输出流来说,只是在逻辑上连接不同的数据源,在创建对象的代码上会存在一定的不同,但是一旦流对象创建完成以后,基本的写入方法都是write方法,也需要首先将需要写入的数据按照一定的格式转换为对应的byte数组/char数组,然后依次写入即可。

         所以IO类的这种设计形式,只需要熟悉该体系中的某一个类的使用以后,就可以触类旁通的学会其它相同类型的类的使用,从而简化程序员的学习,使得使用时保持统一。


0 1
原创粉丝点击