参考传智播客--毕向东老师
IO就是实现文件的读写,既然读,我们就必须要知道我们读取的数据存储在哪里,可以理解为数据的源头。既然需要写数据,我们也需要明确将数据写在什么地方,也就是需要明确目的。当然在操作数据的过程中更需要了解操作的数据类型,是否为存文本文件,如果是就用字符流相关的读写技术,如果不是就用字节流相关的技术。当体系明确后就要明确使用具体的对象,原设备是什么,目的设备是什么。
通过两个明确来完成。
1、明确源和目的。
源:输入流。InputStream、Reader。
目的:输出流。OutputStream、Writer。
2、操作的是否为存文本数据
是:字符流。
不是:字节流。
3、当体系明确后,在明确要使用那个具体的对象。
通过设备来区分:
原设备:内存,硬盘。键盘
目的设备:内存,硬盘,控制台。
4、明确是否对流对象进行增强,提高效率,需要:BufferedReader、BufferedWriter
A,需求:将键盘录入的数据打印到控制台上
源:键盘录入。BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
目的:控制台。BufferedWriter bufw =new BufferedWriter(new OutputStreamWriter(System.out));
B、需求:把键盘录入的数据存储到一个文件中。
源:键盘
目的:文件。BufferedWriter bufw =new BufferedWriter(new OutputStreamWriter(new FileOutputStream("data.txt")));
C、需求:想要将一个文件中的数据打印在控制台上
源:文件。BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("demo.txt")));
目的:控制台。BufferedWriter bufw =new BufferedWriter(new OutputStreamWriter(System.out));
D、需求:将一文件中的数据存储到另一个文件
源:文件。BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("demo.txt")));
目的:文件。BufferedWriter bufw =new BufferedWriter(new OutputStreamWriter(new FileOutputStream("data.txt")));
针对需求D模式,具体分析如下:
将一个文本文件中的数据存储到另一个文件中。复制文件。
源:因为是源,需要使用读取流。InputStream Reader
是不是操作文本文件。
是!这时就可以选择Reader
这样的体系就明确了。
接下来明确要具体用体系中的哪个对象。
明确设备:硬盘。上一个文件。
Reader体系中可以操作的文件的对象是FileReader
是否需要提高效率:是,加入Reader体系中的缓冲区BufferedReader
FileReader fr = new FileReader("a.txt");
BufferedReader bufr = new BufferedReader(fr);
目的:OutputStream ,Writer
是否为存文本。
是:Writer
设备:硬盘,一个文件。
Writer体系中可以操作文件的对象FileWriter。
是否需要提高效率:是,加入Writer体系中的缓冲区BufferedWriter
FileWriter fw = new FileWriter("b.txt");
BufferedWriter bufw = new BufferedWriter(fw);
以上着重叙述的是如何操作字符数据的,对于字节数据该分析方法同样适用。