1、明确源和目的:
源:输入流 InputStream Reader
目的:输出流 OutStream Writer
2.操作的数据是否是纯文本
是 字符流 Reader Writer
否字节流 InputStream OutputStream
3、体系明确后,要确定使用哪个具体对象
根据设备分
源设备:内存 硬盘键盘
目的设备: 内存硬盘 控制台
根据设备的需求,使用转换流:InputStreamReader OutputStreamWriter
4、为了提高效率,选择缓冲流:Buffered----
*************************************常见实例分析*******************************
一、将一个文本文件中的数据存储到另外一个文件---字符流文件复制
源:因为是读取流,所以要用读取流 InputStream Reader,是文本文件, 确定为Reader;
明确设备 :硬盘 上一个文件,Reader体系中可以操作文件的对象 FileReader:
FileReader fr = new FileReader("xx.txt");
是否要提高效率:是 BufferedReader: BufferedReader bufr = new BufferedReader(fr);
目的:输出流 OutputStream Writer 文本文件 :Writer
明确设备 硬盘 一个新增文件 Writer体系中可以操作文件的对象 FileWriter
FileWriter fw = new FileWriter("xx_copy.txt");
是否要提高效率:是 BufferedWriter BufferedWriter bufw = new BufferedWriter(fw);
2、一个图片文件存储到另外一个文件-----字节流文件复制
源:因为是读取流,所以要用读取流 InputStream Reader 图片文件 确定为InputStream
明确设备 硬盘 上一个文件 Reader体系中可以操作文件的对象 FileInputStream
FileInputStream fis = new FileInputStream("xx.jpg");
是否要提高效率:是 BufferedInputStream
BufferedInputStream bufi = new BufferedInputStream (fis);
目的:输出流 OutputStream Writer 图片文件 :OutputStream
明确设备 硬盘 一个新增文件 OutputStream 体系中可以操作文件的对象 FileOutputStream
FileOutputStream fos = new FileOutputStream("xx_copy.jpg");
是否要提高效率:是 BufferedOutputStream
BufferedOutputStream bufo = new BufferedOutputStream (fos);
3、将键盘录入数据保存到一个文件中-----字节流输入
源:InputStream Reader 键盘输入是纯文本 Reader
设备:键盘对应的对象是System.in
System.in 对应的是字节流 ,为了操作数据的方便,可以把字节流转换为字符流来操作
因此需要 把System.in 转换为Reader来操作,因此需要使用Reader体系中的InputStreamReader
InputStreamReader isr = new InputStreamReader(Syetem.in);
如果需要提高效率则使用BufferedReader
BufferedReader bufr = new BufferedReader(isr);
目的:OutputStream Writer 确定目的是纯文本 所以 使用 Writer
设备: 硬盘 一个文本文件 所以使用FileWriter
FileWriter fw = new FileWriter("xx.txt");
如果要提高效率 则使用BufferedWriter
BufferedWriter bufw = new BufferedWriter(fw);
4、将一个文本文件打印在控制台上-----字符流输出
源:InputStream Reader 文本文件:Reader
设备:硬盘 一个文本文件 所以使用 FileReader
FileReader fr = new FileReader("x.txt");
是否要提高效率:是 BufferedReader
BufferedReader bufr = new BufferedReader(fr);
目的:OutputStream Writer 文本文件:Writer
设备:控制台 对应的对象是 System.out
System.out 对应的是字节流 ,为了操作数据的方便,可以把字节流转换为字符流来操作
因此需要 把System.out 转换为Writer来操作,因此需要使用Writer体系中的OutputStreamWriter
OutputStreamWriter osw = new OutputStreamWriter(System.out);
是否要提高效率:是 BufferedWriter
BufferedWriter bufw = new BufferedWriter(osw);
5、拓展一下:如果需要把录入的数据按照指定编码表(utf-8)存入到指定文件中
目的:OutputStream Writer 确定目的是纯文本 所以 使用 Writer
设备: 硬盘 一个文本文件 所以使用FileWriter
但是FileWriter 使用的默认编码表是GBK,因此,只有通过转换流来指定编码表存入数据
所以要使用 转换流对象 OutputStreamWriter。
而该转换流的对象需要接收一个字节数输出流,并且是操作文件的字节输出流:FileOutputStream
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("x.txt"),"UTF-8");
如果要提高效率 则使用BufferedWriter
BufferedWriter bufw = new BufferedWriter(osw);