流的操作规律。
因为io包中的对象很多,最重要的是要知道完成数据处理是,要使用哪个对象最合适。
如何判断要使用哪些对象呢?
通过几个明确来判断对象的使用。
1,明确数据源,和 数据目的(数据汇)
数据源:InputStream Reader
数据目的:OutputStream Writer
2,明确数据的内容是否是纯文本。只要是纯文本数据,就使用字符流。
数据源: 是: Reader。
数据目的:是:Writer
如果不是,就使用InputStream或者OutputStream
如果数据不能明确,只有使用字节流。
这样就可以将四个基类,进行确定,要使用哪一个。
3,明确具体设备。
数据源:键盘(System.in) ,内存(数组), 硬盘(File开头的流对象)。
数据目的: 控制台(System.out),内存(数组),硬盘(File开头的流对象)。
4,明确是否需要提高效率?
是:使用带Buffer对象。
5,是否需要一些特殊场景的操作,来完成数据的特殊处理。
需求1:复制一个文本文件。
1,
数据源:InputStrea,Reader
数据目的:OutputStream ,Writer
2,
是否是纯文本。
是。
数据源:Reader
数据目的:Writer
3,
明确设备:
数据源:是一个文件,硬盘设备。 FileReader
数据目的:是一个文件。硬盘设备。 FileWriter.
代码就已经出来了。
FileReader fr = new FileReader("a.txt");
FileWriter fw = new FileWriter("b.txt");
4,
需要高效吗?
需要。
FileReader fr = new FileReader("a.txt");
BufferedReader bufr = new BufferedReader(fr);
FileWriter fw = new FileWriter("b.txt");
BufferedWriter bufw = new BufferedWriter(fw);
-----------------
需求2:将键盘录入的数据存储到一个文件中。
1,
数据源:InputStrea,Reader
数据目的:OutputStream ,Writer
2,
是否是纯文本?
是。
数据源:Reader
数据目的:Writer.
3,
设备:
数据源:System.in;为了方便于操作数据源的字节数据,对其进行转换。使用转换流。
数据目的:硬盘文件。FileWriter.
发现一个问题,就是数据源是一个字节流。
因为纯文本使用字符流操作最方便,
所以,将数据源设备对应的字节流转成字符流。
InputStreamReader isr = new InputStreamReader(System.in);
FileWriter fw = new FileWriter("a.txt");
4,
需要高效吗?需要。
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new FileWriter("a.txt"));
需求3:将一个文本文件打印到控制台
1,
数据源:InputStrea,Reader
数据目的:OutputStream ,Writer
2,
是否是纯文本?
是。
数据源:Reader
数据目的:Writer.
3,
数据源:硬盘文件 FileReader
数据目的:控制台 System.out.因为目的是字节流,而操作的是字符流,所以要将字符流转成字节流到目的中。
使用到了转换流。 OutoutStreamWriter
// FileReader fr = new FileReader("a.txt");
// PrintStream ps = System.out;//还没学到。所以改了。
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:复制一个文本文件。将一个GBK编码的文件,复制到另一个用UTF-8编码的文件中。
1,
数据源:InputStrea,Reader
数据目的:OutputStream ,Writer
2,
是否是纯文本?
是。
数据源:Reader
数据目的:Writer.
3,
设备:
数据源:硬盘文件
数据目的:硬盘文件。
涉及到编码数据。
源:是gbk FileReader
目的:因为是UTF-8,所以只能使用转换流。转换流中需要明确具体的字节流和编码。
编码是UTF-8,字节流就是对应硬盘设备的FileOutputStream。
FileReader fr = new FileReader("a.txt");
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"),"utf-8");
需要高效就加上buffer
import java.io.*;
class
{
public static void main(String[] args)
{
FileReader fr = new FileReader("a.txt");//
}
}