import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
public class copyData {
/*流操作的基本规律
*最痛苦的就是流对象有很多,不知道该用哪一个
*通过3个明确来完成
*1.明确源和目的 源:输入流。InputStream Reader
* 目的:输出流 OutPutStream Writer
*2.操作的数据是否是纯文本。
* 是:字符流
* 不是:字节流
*3.当体系明确后,在明确要使用那个具体的对象
* 通过设备来进行区分
* 源设备:内存 , 硬盘 ,键盘
* 目的设备:内存,硬盘,控制台
/*需求1:
1.将一个文件中的数据存储到另一个文件中 (复制文件)
源:因为是源 ,所以使用读取流 。InputStream Reader
是操作文本文件,是所以选择Reader
接下来明确要使用该体系中的那个对象,
明确设备:硬盘。上一个文件
Reader体系中可以操作文件的对象是FileReader
FileReader fr= new FileReader("a.txt");
是否需要提高效率 :是 加入redear体系中缓冲区 BufferedReader
BufferedReader bufr = new BufferedReader(fr);
目的:OutputStream Writer
是否是纯文本
设备:硬盘 一个文件
Writer体系中可以操作文件的对象是Filewriter
FileWriter fw = new FileWriter("a.txt");
是否需要提高效率 :是 加入Writer体系中缓冲区 BufferedWriter
BufferedWriter bufw= new BufferedWriter(fw);
需求2:键盘录入大的数据保存到一个文件中
这个需求源和目的都存在
那么分析
源:InputStream Reader
是不是纯文本:是! Reader
设备:键盘 对应的对象是system.in
不是选择Reader么?System.in对应的不是字节流么
为了操作键盘的文本数据方便。转成字符流 按照字符串操作是最简单的
所以既然明确了Reader,那么就将system.in转换成Reader
用了Reader体系 中转换流 InputStreamReader
InputStreamReader isr = new InputStreamReader(System.in);
需要提高效率 需要
BufferedReader bufr = new BufferedReader(isr);
目的:OutputStream Wirtrer
是否纯文本 :是 用Writer
设备:硬盘 一个文件 使用FileWriter
FileWriter fw = new FileWriter("");
需要提高效率 需要
BufferedWriter buw = new BufferedWriter(fw);
*************************
扩展一下 想要把录入的数据按照指定的编码表(utf—8)将数据存到文件中
目的:OutputStream Wirtrer
是否纯文本 :是 用Writer
设备:硬盘 一个文件 使用FileWriter
但是FileWriter使用的默认编码表GBK
所以要使用转换流 OutputStreamWriter
而该转换流对象要接收一个字节输出流,而且还可以操作的文件的字节输出流。FileOutputStream
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("a.txt"), "UTF-8");
需要提高效率 需要
BufferedWriter buw = new BufferedWriter(osw);
注意:
记住转换流什么时候使用,字符和字节之间的桥梁,通常,涉及到字符串转换时
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
copyData_2();
}
//1.将一个文件中的数据存储到另一个文件中 (复制文件)
static void copyData_1() {
// TODO Auto-generated method stub
}
//需求2:键盘录入大的数据保存到一个文件中
//扩展一下 想要把录入的数据按照指定的编码表(utf—8)将数据存到文件中
static void copyData_2() {
// TODO Auto-generated method stub
//new InputStreamReader(System.in)将字节流转换为字符流
//键盘的最常见写法
BufferedReader bur = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter buw = null;
try {
buw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("/Users/denmeiho/Desktop/a.txt"), "UTF-8"));
String line = null;
try {
while ((line = bur.readLine())!=null) {
buw.write(line);
buw.newLine();
buw.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
buw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}