黑马程序员_java中IO流的操作规律

来源:互联网 发布:淘宝可以用什么支付 编辑:程序博客网 时间:2024/04/30 23:48

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

重新看了遍IO流,把笔记整理了下,写在这里,让自己多记得。这IO流得好好弄啊,对象太多,选用的时候比较乱,理清下比较好。

IO流操作规徇及需求演示:
流的操作规律:
之所以要弄清楚这个规律,是因为流对象太多,开发时不知道用哪个对象合适。
 
想要知道开发时用到哪些对象。只要通过四个明确即可。
 
1,明确源和目的(汇)
  源:InputStream  Reader
  目的:OutputStream  Writer
 
2,明确数据是否是纯文本数据。
  源:是纯文本:Reader
    否:InputStream
  目的:是纯文本 Writer
    否:OutputStream
  
  到这里,就可以明确需求中具体要使用哪个体系。
  
3,明确具体的设备。
  源设备:
    硬盘:File
    键盘:System.in
    内存:数组
    网络:Socket流
    
  目的设备:
    硬盘:File
    控制台:System.out
    内存:数组
    网络:Socket流
 
4,是否需要其他额外功能。
  1,是否需要高效(缓冲区);
    是,就加上buffer.
  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));
 
什么时候使用转换流呢?
  1,源或者目的对应的设备是字节流,但是操作的却是文本数据,可以使用转换作为桥梁。
    提高对文本操作的便捷。
  2,一旦操作文本涉及到具体的指定编码表时,必须使用转换流 。

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

0 0
原创粉丝点击