黑马程序员-IO流操作规则

来源:互联网 发布:smali 打印数组 编辑:程序博客网 时间:2024/05/09 23:05


     Java类库中的I/O类库分成输入和输出两部分,可以在JDK文档里的类层次结构中查看到。通过继承,任何自InputStreamReader派生来的类都包含有名为read()的基本方法,用于读取单个字节或字节数组。同样,任何自OutputStreamWriter派生来的类都包含有名为write()的基本方法,用于写单个字节或者字节数组。

    但是,在实际操作中,最让我们迷惑和头疼的事情就是,流对象有很多,但是我们却不知道该用哪一个来操作。因此,在这里总结出来一些相关的操作规则,按照这些规则操作,可以更加方便准确地选择流对象。

    这些操作规则,总结为三个步骤,即:

1、明确源和目的;

      所谓源,是指输入流,在这里也就是InputStream Reader;目的是指输出流:OutputStreamWriter

2、判断操作的数据是否是纯文本;

       如果操作的数据时纯文本,那么就要使用字符流,如果不是,则使用字节流

3、明确要使用哪个具体的对象

     要确定使用哪个具体的对象,还要通过设备来区分,这里的设备也分为源设备和目的设备。源设备有内存、硬盘和键盘;而母的设备有内存、硬盘和控制台。

通过前两个步骤,就可以判断出操作体系,根据所得出的操作体系,再加上第三步,就可以轻松的确定使用哪个具体的对象了。下面以两个具体的实例来说明问题:

1、需求:将一个文本文件中的数据存储到另一个 文件中(复制文件)

    

[html]view plaincopyprint?

1. package io;  

2. /*  

3.  * 需求:将一个文件中的数据存储到另一个文件中(复制文件)  

4.  * */  

5. import java.io.*;  

6. public class CopyDemo {  

7.     public static void main(String[] args) throws IOException{  

8.         /**因为是源,所以使用读取流InputStream或者是Reader  

9.         又因为是文本文件,所以选择Reader,这样体系就明确了,接下来明确使用该体系中的哪个对象  

10.        明确设备的时候,因为要存储文件,所以设备是硬盘上的一个文件,而Reader中可以操作文件的对象是  

11.        FileReader  

12.        */  

13.        FileReader fr = new FileReader("a.txt");  

14.        //为了提高效率,加入Reader体系中的缓冲区BufferedReader  

15.        BufferedReader bufr = new BufferedReader(fr);  

16.        /**  

17.         * 判断目的,要使用输出流OutputStream或者是Writer,因为是文本文件,所以确定使用Writer  

18.         * 判断设备的时候也是硬盘上的一个文件,Writer体系中国可以操作文件对象的是FileWriter  

19.         * 为了提高效率,同样加入Writer体系中的缓冲区BufferedWriter  

20.         * */  

21.        FileWriter fw = new FileWriter("b.txt");  

22.        //为了提高效率,加入Writer体系中的缓冲区BufferedWriter  

23.        BufferedWriter bufw = new BufferedWriter(fw);  

24.        //接下来便是文件复制的操作  

25.        String line = null;  

26.        while((line = bufr.readLine()) != null){  

27.            bufw.write(line);  

28.            bufw.newLine();  

29.            bufw.flush();  

30.        }  

31.        bufr.close();  

32.        bufw.close();  

33.    }  

34.}  

package io;

/*

 *需求:将一个文件中的数据存储到另一个文件中(复制文件)

 * */

import java.io.*;

public class CopyDemo {

public static void main(String[]args) throws IOException{

 /**因为是源,所以使用读取流InputStream或者是Reader

 又因为是文本文件,所以选择Reader,这样体系就明确了,接下来明确使用该体系中的哪个对象

 明确设备的时候,因为要存储文件,所以设备是硬盘上的一个文件,而Reader中可以操作文件的对象是

 FileReader

 */

 FileReader fr = newFileReader("a.txt");

 //为了提高效率,加入Reader体系中的缓冲区BufferedReader

 BufferedReader bufr = newBufferedReader(fr);

 /**

  *判断目的,要使用输出流OutputStream或者是Writer,因为是文本文件,所以确定使用Writer

  *判断设备的时候也是硬盘上的一个文件,Writer体系中国可以操作文件对象的是FileWriter

  *为了提高效率,同样加入Writer体系中的缓冲区BufferedWriter

  * */

 FileWriter fw = newFileWriter("b.txt");

 //为了提高效率,加入Writer体系中的缓冲区BufferedWriter

 BufferedWriter bufw = newBufferedWriter(fw);

 //接下来便是文件复制的操作

 String line = null;

while((line= bufr.readLine()) != null){

  bufw.write(line);

  bufw.newLine();

  bufw.flush();

 }

 bufr.close();

 bufw.close();

}

}

2、需求:将键盘录入的数据保存到一个文件中

[java]view plaincopyprint?

1. package io;  

2. /* 

3.  * 需求:将键盘录入的数据保存到一个文件中 

4.  * */  

5. import java.io.*;  

6. public class KeyCode {  

7.     public static void main(String[] args) throws IOException{  

8.         /**因为是源,所以使用读取流InputStream或者是Reader 

9.         又因为是文本文件,所以选择Reader,这样体系就明确了,接下来明确使用该体系中的哪个对象 

10.        明确设备的时候,因为要从键盘录入数据,所以设备就是键盘,对应的对象就是System.in 

11.        为了操作键盘的文本数据方便,构成字符流按照字符串是最方便的,所以既然明确了Reader 

12.        那么就将System.in转换成Reader,用到了Reader中的InputStreamReader 

13.        **/  

14.        InputStreamReader isr = new InputStreamReader(System.in);  

15.        //为了提高效率,加入reader体系中的缓冲区BufferedReader  

16.        BufferedReader bufr = new BufferedReader(isr);  

17.        /** 

18.         * 判断目的,要使用输出流OutputStream或者是Writer,因为是文本文件,所以确定使用Writer 

19.         * 判断设备的时候也是硬盘上的一个文件,Writer体系中国可以操作文件对象的是FileWriter 

20.         * 为了提高效率,同样加入Writer体系中的缓冲区BufferedWriter 

21.         * */  

22.        FileWriter fw = new FileWriter("c.txt");  

23.        //为了提高效率,加入Writer体系中的缓冲区Buff  

24.        BufferedWriter bufw = new BufferedWriter(fw);  

25.        //接下来便是文件复制的操作  

26.                String line = null;  

27.                while((line = bufr.readLine()) != null){  

28.                    bufw.write(line.toUpperCase());  

29.                    bufw.newLine();  

30.                    bufw.flush();  

31.                }  

32.                bufr.close();  

33.                bufw.close();  

34.    }  

35.}  

package io;

/*

 *需求:将键盘录入的数据保存到一个文件中

 * */

import java.io.*;

public class KeyCode {

 public static void main(String[]args) throws IOException{

  /**因为是源,所以使用读取流InputStream或者是Reader

  又因为是文本文件,所以选择Reader,这样体系就明确了,接下来明确使用该体系中的哪个对象

  明确设备的时候,因为要从键盘录入数据,所以设备就是键盘,对应的对象就是System.in

  为了操作键盘的文本数据方便,构成字符流按照字符串是最方便的,所以既然明确了Reader

  那么就将System.in转换成Reader,用到了Reader中的InputStreamReader

  **/

  InputStreamReader isr = newInputStreamReader(System.in);

  //为了提高效率,加入reader体系中的缓冲区BufferedReader

  BufferedReader bufr = newBufferedReader(isr);

  /**

   *判断目的,要使用输出流OutputStream或者是Writer,因为是文本文件,所以确定使用Writer

   *判断设备的时候也是硬盘上的一个文件,Writer体系中国可以操作文件对象的是FileWriter

   *为了提高效率,同样加入Writer体系中的缓冲区BufferedWriter

   * */

  FileWriter fw = newFileWriter("c.txt");

  //为了提高效率,加入Writer体系中的缓冲区Buff

  BufferedWriter bufw = newBufferedWriter(fw);

  //接下来便是文件复制的操作

     String line = null;

     while((line = bufr.readLine())!= null){

      bufw.write(line.toUpperCase());

       bufw.newLine();

       bufw.flush();

     }

     bufr.close();

     bufw.close();

 }

}

 

0 0
原创粉丝点击