A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© IT_JM 中级黑马   /  2013-10-11 00:20  /  1663 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

二、流操作规律
1、
        源:键盘录入。
        目的:控制台。
2、需求:想把键盘录入的数据存储到一个文件中。
        源:键盘
        目的:文件。
        使用字节流通向字符流的转换流(桥梁):InputStreamReader
3、需求:想要将一个文件的数据打印在控制台上。
        源:文件
        目的:控制台
        使用字符流通向字节流的转换流(桥梁):OutputStreamWriter
4、流操作的基本规律:
        最痛苦的就是流对象有很多,不知道该用哪一个。
通过三个明确来完成:
4.1   明确源和目的。
        源:输入流。InputStream  Reader
        目的:输出流。OutputStream  Writer
4.2   操作的数据是否是纯文本。
        是:字符流
        否:字节流
4.3   当体系明确后,再明确要使用哪个具体的对象。通过设备来进行区分:
        源设备:内存,硬盘,键盘
        目的设备:内存,硬盘,控制台
5、规律体现
5.1 将一个文本文件中数据存储到另一个文件中。复制文件。
        1)源:因为是源,所以使用读取流:InputStream和Reader
             明确体系:是否操作文本:是,Reader
              明确设备:明确要使用该体系中的哪个对象:硬盘上的一个文件。Reader体系中可以操作文件的对象是FileReader
              是否需要提高效率:是,加入Reader体系中缓冲区 BufferedReader.
              FileReader fr = new FileReader("a.txt");
              BufferedReader bufr = new BufferedReader(fr);
        2)目的:输出流:OutputStream和Writer
             明确体系:是否操作文本:是,Writer
              明确设备:明确要使用该体系中的哪个对象:硬盘上的一个文件。Writer体系中可以操作文件的对象FileWriter。
              是否需要提高效率:是,加入Writer体系中缓冲区 BufferedWriter
              FileWriter fw = new FileWriter("b.txt");
              BufferedWriter bufw = new BufferedWriter(fw);
练习:将一个图片文件中数据存储到另一个文件中。复制文件。要按照以上格式自己完成三个明确。
        1)源:输入流,InputStream和Reader
            是否是文本?否,InputStream
            源设备:硬盘上的一个文件。InputSteam体系中可以操作文件的对象是FileInputSteam
            是否需要提供效率:是,BufferedInputStream
              BufferedInputSteambis=newBufferedInputStream(newFileInputStream("c:/users/asus/desktop/1.jpg"));
        2)目的:输出流,OutputStream和Writer
             是否是文本?否,OutputStream
             源设备:硬盘上的文件,FileOutputStream
             是否需要提高效率:是,加入BufferedOutputStream
               BufferedOutputStreambos=newBufferedOutputStream(newFileOutputStream("c:/users/asus/desktop/2.jpg"));
5.2 需求:将键盘录入的数据保存到一个文件中。
        1)源:InputStream和Reader
              是不是纯文本?是,Reader
              设备:键盘。对应的对象是System.in。——为了操作键盘的文本数据方便。转成字符流按照字符串操作是最方便的。所以既然明确了Reader,那么就将System.in转换成Reader。用Reader体系中转换流,InputStreamReader
              InputStreamReaderisr = new InputStreamReader(System.in);
             需要提高效率吗?需要,BufferedReader
             BufferedReaderbufr = new BufferedReader(isr);
       2)目的:OutputStream  Writer
             是否是存文本?是!Writer。
             设备:硬盘。一个文件。使用 FileWriter。
             FileWriter fw = newFileWriter("c.txt");
           需要提高效率吗?需要。
            BufferedWriter bufw = new BufferedWriter(fw);
5.3   扩展:想要把录入的数据按照指定的编码表(UTF-8)(默认编码表是GBK),将数据存到文件中。
        目的:OutputStream  Writer
        是否是存文本?是!Writer。
        设备:硬盘上的一个文件。使用 FileWriter。——但是FileWriter是使用的默认编码表:GBK。而存储时,需要加入指定编码表utf-8。而指定的编码表只有转换流可以指定。所以要使用的对象是OutputStreamWriter。
        该转换流对象要接收一个字节输出流,而且还可以操作的文件的字节输出流:FileOutputStream
        OutputStreamWriter osw =new OutputStreamWriter(newFileOutputStream("d.txt"),"UTF-8");
        需要高效吗?需要,BufferedWriter
        BufferedWriter bufw = new BufferedWriter(osw);
记住:
       转换流什么使用?
       字符和字节之间的桥梁。通常,涉及到字符编码转换时,需要用到转换流。
代码示例:
  1. 1. /*
  2. 2. 2、需求:想把键盘录入的数据存储到一个文件中。
  3. 3. 源:键盘
  4. 4. 目的:文件
  5. 5. 把录入的数据按照指定的编码表(UTF-8),将数据存到文件中。
  6. 6.
  7. 7.
  8. 8. 3、需求:想要将一个文件的数据打印在控制台上。
  9. 9. 源:文件
  10. 10. 目的:控制台
  11. 11.
  12. 12.
  13. 13. */
  14. 14. import java.io.*;
  15. 15. class TransStreamDemo2
  16. 16. {
  17. 17. public static void main(String[] args)throws IOException
  18. 18. {
  19. 19.
  20. 20. //键盘录入
  21. 21. BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  22. 22.
  23. 23. //存入文件中,按照指定的编码表(UTF-8)
  24. 24. BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("readin1.txt"),"UTF-8"));
  25. 25.
  26. 26. String line=null;
  27. 27. while((line=br.readLine())!=null)
  28. 28. {
  29. 29. if("over".equals(line))
  30. 30. break;
  31. 31. bw.write(line);
  32. 32. bw.newLine();
  33. 33. bw.flush();
  34. 34. }
  35. 35.
  36. 36. /*
  37. 37. //录入文件数据
  38. 38. BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("TransStreamDemo2.java")));
  39. 39.
  40. 40. //显示在控制台
  41. 41. BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
  42. 42.
  43. 43. String line=null;
  44. 44. while((line=br.readLine())!=null)
  45. 45. {
  46. 46. if("over".equals(line))
  47. 47. break;
  48. 48. bw.write(line);
  49. 49. bw.newLine();
  50. 50. bw.flush();
  51. 51. }
  52. 52. */
  53. 53. }
  54. 54. }
复制代码

评分

参与人数 2技术分 +1 黑马币 +15 收起 理由
黄文伯 + 1 很给力!
潘才新 + 15 很给力!

查看全部评分

1 个回复

倒序浏览
{:soso_e179:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马