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 {
/*流操作的基本規(guī)律
*最痛苦的就是流對(duì)象有很多像啼,不知道該用哪一個(gè)
*通過(guò)3個(gè)明確來(lái)完成
*1.明確源和目的? ? ? 源:輸入流。InputStream? Reader
*? ? ? ? ? ? ? ? 目的:輸出流 OutPutStream Writer
*2.操作的數(shù)據(jù)是否是純文本甚颂。
*? ? ? ? ? ? ? ? ? ? ? ? ? 是:字符流
*? ? ? ? ? ? ? ? ? ? ? ? 不是:字節(jié)流
*3.當(dāng)體系明確后蹭睡,在明確要使用那個(gè)具體的對(duì)象
*? 通過(guò)設(shè)備來(lái)進(jìn)行區(qū)分
*? ? 源設(shè)備:內(nèi)存? , 硬盤(pán)? 辫呻,鍵盤(pán)
*? ? 目的設(shè)備:內(nèi)存清钥,硬盤(pán),控制臺(tái)
/*需求1:
1.將一個(gè)文件中的數(shù)據(jù)存儲(chǔ)到另一個(gè)文件中? (復(fù)制文件)
源:因?yàn)槭窃? 祟昭,所以使用讀取流 怖侦。InputStream Reader
是操作文本文件搬葬,是所以選擇Reader
接下來(lái)明確要使用該體系中的那個(gè)對(duì)象,
明確設(shè)備:硬盤(pán)。上一個(gè)文件
Reader體系中可以操作文件的對(duì)象是FileReader
FileReader fr= new FileReader("a.txt");
是否需要提高效率? :是? 加入redear體系中緩沖區(qū) BufferedReader
BufferedReader bufr = new? BufferedReader(fr);
目的:OutputStream Writer
是否是純文本
設(shè)備:硬盤(pán)? 一個(gè)文件
Writer體系中可以操作文件的對(duì)象是Filewriter
FileWriter fw =? new FileWriter("a.txt");
是否需要提高效率? :是? 加入Writer體系中緩沖區(qū) BufferedWriter
BufferedWriter bufw= new? BufferedWriter(fw);
需求2:鍵盤(pán)錄入大的數(shù)據(jù)保存到一個(gè)文件中
這個(gè)需求源和目的都存在
那么分析
源:InputStream Reader
是不是純文本:是!? Reader
設(shè)備:鍵盤(pán)? 對(duì)應(yīng)的對(duì)象是system.in
不是選擇Reader么?System.in對(duì)應(yīng)的不是字節(jié)流么
為了操作鍵盤(pán)的文本數(shù)據(jù)方便歧沪。轉(zhuǎn)成字符流 按照字符串操作是最簡(jiǎn)單的
所以既然明確了Reader歹撒,那么就將system.in轉(zhuǎn)換成Reader
用了Reader體系 中轉(zhuǎn)換流 InputStreamReader
InputStreamReader isr = new InputStreamReader(System.in);
需要提高效率? 需要
BufferedReader bufr = new? BufferedReader(isr);
目的:OutputStream Wirtrer
是否純文本 :是? 用Writer
設(shè)備:硬盤(pán) 一個(gè)文件? 使用FileWriter
FileWriter fw = new FileWriter("");
需要提高效率? 需要
BufferedWriter buw = new BufferedWriter(fw);
*************************
擴(kuò)展一下 想要把錄入的數(shù)據(jù)按照指定的編碼表(utf—8)將數(shù)據(jù)存到文件中
目的:OutputStream Wirtrer
是否純文本 :是? 用Writer
設(shè)備:硬盤(pán) 一個(gè)文件? 使用FileWriter
但是FileWriter使用的默認(rèn)編碼表GBK
所以要使用轉(zhuǎn)換流 OutputStreamWriter
而該轉(zhuǎn)換流對(duì)象要接收一個(gè)字節(jié)輸出流,而且還可以操作的文件的字節(jié)輸出流。FileOutputStream
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("a.txt"), "UTF-8");
需要提高效率? 需要
BufferedWriter buw = new BufferedWriter(osw);
注意:
記住轉(zhuǎn)換流什么時(shí)候使用迈着,字符和字節(jié)之間的橋梁竭望,通常,涉及到字符串轉(zhuǎn)換時(shí)
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
copyData_2();
}
//1.將一個(gè)文件中的數(shù)據(jù)存儲(chǔ)到另一個(gè)文件中? (復(fù)制文件)
static void copyData_1() {
// TODO Auto-generated method stub
}
//需求2:鍵盤(pán)錄入大的數(shù)據(jù)保存到一個(gè)文件中
//擴(kuò)展一下 想要把錄入的數(shù)據(jù)按照指定的編碼表(utf—8)將數(shù)據(jù)存到文件中
static void copyData_2() {
// TODO Auto-generated method stub
//new InputStreamReader(System.in)將字節(jié)流轉(zhuǎn)換為字符流
//鍵盤(pán)的最常見(jiàn)寫(xiě)法
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();
}
}
}
}