java_IO总结(2)

本篇两个重点(1)对上一篇的选择流理论进行需求分析,并选择合适流。

      (2)什么时候使用转换流。

需求1:复制一个文本文件。
                 1,明确源和目的。
                    源:InputStream Reader
                    目的:OutputStream Writer
                 2,是否是纯文本?是!
                    源:Reader
                    目的:Writer

                 3,明确具体设备。
                    源:硬盘:File
                    目的:硬盘:File

FileReader fr = new FileReader("a.txt");
FileWriter fw = new FileWriter("b.txt");

                   4,需要额外功能吗?
                      需要。
BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufw = new BufferedWriter(new FileWriter("b.txt"));

================================================

需求2:读取键盘录入信息,并写入到一个文件中。

    1,明确源和目的。
      源:InputStream Reader
      目的:OutputStream Writer
    2,是否是纯文本呢?
      是,
      源:Reader
      目的:Writer
    3,明确设备
      源:
      键盘。System.in
      目的:
      硬盘。File
InputStream in = System.in;
FileWriter fw = new FileWriter("b.txt");
      这样做可以完成,但是麻烦。将读取的字节数据转成字符串。再由字符流操作。
    4,需要额外功能吗?
      需要。转换。 将字节流转成字符流。因为名确的源是Reader,这样操作文本数据做便捷。
      所以要将已有的字节流转成字符流。使用字节-->字符 。InputStreamReader
InputStreamReader isr = new InputStreamReader(System.in);
FileWriter fw = new FileWriter("b.txt");

      还需要功能吗?
      需要:想高效。
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new FileWriter("b.txt"));



===================================================

需求3:将一个文本文件数据显示在控制台上。
     1,明确源和目的。
      源:InputStream Reader
      目的:OutputStream Writer
    2,是否是纯文本呢?
      是,
      源:Reader
      目的:Writer
    3,明确具体设备
      源:
      硬盘:File
      目的:
      控制台:System.out

FileReader fr = new FileReader("a.txt");
OutputStream out = System.out;//PrintStream
    4,需要额外功能吗?
      需要,转换。
FileReader fr= new FileReader("a.txt");
OutputStreamWriter osw = new OutputStreamWriter(System.out);
      需要,高效。
BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

================================================================

需求4:读取键盘录入数据,显示在控制台上。
    1,明确源和目的。
      源:InputStream Reader
      目的:OutputStream Writer
    2,是否是纯文本呢?
      是,
      源:Reader
      目的:Writer
    3,明确设备。
      源:
      键盘:System.in
      目的:
      控制台:System.out

InputStream in = System.in;
OutputStream out = System.out;

    4,明确额外功能?
      需要转换,因为都是字节流,但是操作的却是文本数据。
      所以使用字符流操作起来更为便捷。
InputStreamReader isr = new InputStreamReader(System.in);
OutputStreamWriter osw = new OutputStreamWriter(System.out);

      为了将其高效。
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));


============================================================

5,将一个中文字符串数据按照指定的编码表写入到一个文本文件中.

    1,目的。OutputStream,Writer
    2,是纯文本,Writer。
    3,设备:硬盘File
FileWriter fw = new FileWriter("a.txt");
fw.write("你好");

    注意:既然需求中已经明确了指定编码表的动作。
    那就不可以使用FileWriter,因为FileWriter内部是使用默认的本地码表。
    只能使用其父类。OutputStreamWriter.
OutputStreamWriter接收一个字节输出流对象,既然是操作文件,那么该对象应该是FileOutputStream
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("a.txt"),charsetName);

    需要高效吗?
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt"),charsetName));

 

 

(2)什么时候使用转换流

1,源或者目的对应的设备是字节流,但是操作的却是文本数据,可以使用转换作为桥梁。提高对文本操作的便捷。
2,一旦操作文本涉及到具体的指定编码表时,必须使用转换流 。

posted @ 2013-03-27 22:21  wkai212  阅读(127)  评论(0编辑  收藏  举报