------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
流对象最痛苦的就是很多流对象 不知道使用那一个来完成操作,我们需要通过三个明确来确定究竟使用那个对象实现我们的功能1.明确源和目的
源:输入流 InputStream Reader
目的:输出流 OutputStream Writer
2.明确操作是不是纯文本
是:用字符流
不是:字节流
3.体系明确后,再明确要使用那个具体的对象
通过设备来进行区分:
源设备:内存、硬盘、键盘
目的设备:内存、硬盘、控制台
eg1,将一个文本文件中的数据存储到另一个文件中,复制文件
源:因为是源 所以使用读取流 InputStream Reader
是否为操作文本文件 :是
选择使用Reader
这样体系就明确了
接下来明确要使用该体系中的那个对象
明确设备:硬盘。上的一个文件
Reader体系总可以操作文件的对象为FileReader
是否需要提高效率:是 !加入Reader体系中的缓冲区 BufferedReader
FileReader = new FileReader("a.txt");
BufferedReader = new BufferedReader(fr);
目的:文件 OutputStream Writer
是否为纯文本: 是 Writer
设备:硬盘 一个文件
Writer中可以操作文件的对象为FileWriter
是否需要提高效率:是 !加入Writer体系中的缓冲区 BufferedWriter
FileWriter fw = new FileWriter("b.txt");
BufferedWriter = new BufferedWriter(fw);
需求:将一个图片文件中的数据存储到另一个文件中 复制文件
按照以上格式 完成以上三个明确
1.明确源:文件输入流 用InputStream Reader
是否为纯文本:否 用InputStream
源设备:硬盘 用FileInputStream
是否需要提高效率:是
BufferedInputStream
2.明确目的:文件 输出流 用OutputStream Writer
是否为纯文本:否 用OutputStream
目的设备:硬盘
是否需要提高效率:是
BufferedOutputStream
通过三个明确我们可以准确的定位选择究竟使用那个流对象,也就明白了如何操作文件
下面是一个小例子的具体实现:
题目要求:将键盘录入的数据保存到一个文件中
(1)源:输入流 用InputStream Reader
是否为纯文本 是 用Reader 由于下面用的System.in 返回是一个InputStream 所以这里用InputStreamReader
设备:键盘录入 用System.in
是否需要提高效率:是
用BufferedReader
(2)目的:输出流 用OutputStream Writer
是否为纯文本: 是 用Writer
设备:硬盘 用FileWriter
是否需要提高效率 是
用BufferedWriter
package com.chuanzhi.io.stream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
public class TransStreamDemo {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = null;
String line = null;
try {
bw = new BufferedWriter(new FileWriter("out.java"));
while((line = br.readLine()) != null){
if("over".equals(line))
break;
bw.write(line);
bw.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}finally{
if(bw != null){
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}