字符流、字節流的兩個頂層父類:
1.字符流:Reader、Writer
2.字節流:InputStream、OutputStream
下面圖片爲IO常用流之間的關係:(還有部分流沒寫,有興趣的自己研究)
----------------------------------------------------------------------------------------------------------
IO中的流那麼多,我們該用什麼流進行開發呢?
其實掌握IO流規律就行了:
1,明確源和目的(匯)
源:InputStream Reader
目的:OutputStream Writer
2,明確數據是否是純文本數據。
源:是純文本:Reader
否:InputStream
目的:是純文本 Writer
否:OutputStream
到這裏,就可以明確需求中具體要使用哪個體系。
3,明確具體的設備。
源設備:
硬盤:File
鍵盤:System.in
內存:數組
網絡:Socket流
目的設備:
硬盤:File
控制檯:System.out
內存:數組
網絡:Socket流
4,是否需要其他額外功能。
1,是否需要高效(緩衝區);
是,就加上buffer
2,轉換。便於操作
----------------------------------------------------------------------------------------------------------------------
需求1:將e:盤下的mv複製到d:盤
分析:
1.明確源和目的(匯)
Inputstream OutputStream
2.明確數據是否是純文本數據
Inputstream OutputStream
3.明確具體的設備。
源:硬盤File 目的:硬盤File
4.是否要其他功能
要高效 buffer
BufferedInputStream bufis = new BufferedInputStream(new FileInputStream(("e:\\全世界誰傾聽你.mkv"));
BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream(("d:\\全世界誰傾聽你.mkv")));
int len = 0;
while((len = bufis.read())!=-1){
bufos.write(len);
}
bufos.close();
bufis.close();
2.需求2:在控制檯輸入,打印到e:demo.txt文件中
分析:
1.明確源和目的(匯)
Inputstream OutputStream
2.明確數據是否是純文本數據
Inputstream OutputStream
3.明確具體的設備。
源:控制檯system.in 目的:硬盤File
4.是否要其他功能
要高效 buffer
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileInputStream("e:b.txt")));
while((line=bfr.readLine())!=null){
if("over".equals(line)){
break;
}
bfw.write(line.toUpperCase());
bfw.newLine();
bfw.flush();
}