黑马程序员技术交流社区
标题: java中IO操作时的使用规律 [打印本页]
作者: IT_JM 时间: 2013-10-11 00:20
标题: java中IO操作时的使用规律
二、流操作规律
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. /*
- 2. 2、需求:想把键盘录入的数据存储到一个文件中。
- 3. 源:键盘
- 4. 目的:文件
- 5. 把录入的数据按照指定的编码表(UTF-8),将数据存到文件中。
- 6.
- 7.
- 8. 3、需求:想要将一个文件的数据打印在控制台上。
- 9. 源:文件
- 10. 目的:控制台
- 11.
- 12.
- 13. */
- 14. import java.io.*;
- 15. class TransStreamDemo2
- 16. {
- 17. public static void main(String[] args)throws IOException
- 18. {
- 19.
- 20. //键盘录入
- 21. BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
- 22.
- 23. //存入文件中,按照指定的编码表(UTF-8)
- 24. BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("readin1.txt"),"UTF-8"));
- 25.
- 26. String line=null;
- 27. while((line=br.readLine())!=null)
- 28. {
- 29. if("over".equals(line))
- 30. break;
- 31. bw.write(line);
- 32. bw.newLine();
- 33. bw.flush();
- 34. }
- 35.
- 36. /*
- 37. //录入文件数据
- 38. BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("TransStreamDemo2.java")));
- 39.
- 40. //显示在控制台
- 41. BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
- 42.
- 43. String line=null;
- 44. while((line=br.readLine())!=null)
- 45. {
- 46. if("over".equals(line))
- 47. break;
- 48. bw.write(line);
- 49. bw.newLine();
- 50. bw.flush();
- 51. }
- 52. */
- 53. }
- 54. }
复制代码
作者: 潘才新 时间: 2013-10-11 00:23
{:soso_e179:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |