Java 21-7 IO流规律总结
解决开发中使用哪个流对象的问题
1.明确数据源,数据汇(数据目的)
其实就是在明确要使用的io体系 InputStream OutputStream Reader Writer
操作的是源 那么就需要读取
操作的是汇 那么就需要写入
2.操作的数据 是否是纯文本数据 是为字符流 否在字节流
是 并且是源 Reader
是 并且是目的 Writer
3.明确要操作的具体设备 每个设备都有对应的流对象
源:
硬盘 能操作文件的流对象都是 File开头
键盘 System.in
内存 数组
网络 socket流
目的:
硬盘 能操作文件的流对象都是 File开头
内存 数组
网络 System.out
显示器 socket流
4.额外功能
缓冲区 Buffered开头
转换流
需求1: 通过键盘录入数据 并保存到一个文件中
明确1:有源 有目的吗
源使用 InPutStream Reader
目的使用 OutPutStream Writer
明确2: 是纯文本数据吗 是
源 Reader
目的 Writer
明确3:具体设备
源设备System.in
目的设备硬盘
IuputStream is=System.in
FileWriter fw=new FileWriter("a.txt");
将读取的字节存储到数组中 read(byte[])
将字节数组转化成字符串
通过fw.write(String)写入文件中
麻烦 明确源是Reader
明确4:需要功能吗?
需要字节转字符 InputStreamReader
InputStreamReader isr= new InputStreamReader(System.in);
需要额外功能吗?
需要(out带缓存需要刷新)
BufferedReader bufr =new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bwfw=new BufferedWriter(new FileWriter("a.txt"));
readLine();
bufw.write(); bufw.flush();
需求2:读取文本文件中的数据 将其打印到控制台上
明确1:有源 有目的
源:InputStream Reader
目的 OutputStream Writer
明确2:是纯文本
源:Reader
目的:Writer
明确3:具体设备
源设备 :硬盘 File
目的设备:显示器 System.out
FileReader fr=new FileReader("a.txt");
OutputStream ops=System.out;
fr读取数据到数组中。将数组文件打印到显示器
源是字符数据 所以通过字符流操作 通过字符转成字节流 给显示器
明确4:额外功能
字符转换到字节
FileReader fr=new FileReader("a.txt");
OutputStreamWriter osw=new OutputStreamWriter(System.in);
高效
BufferedReader bufr=new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));
读取一行数据
写入一行数据
转换流 InputStreamReader OutputStreamWriter