Java IO流學習-----字節流
/*
1,
源:鍵盤錄入。
目的:控制臺。
2,需求:想把鍵盤錄入的數據存儲到一個文件中。
源:鍵盤。
目的:文件。
3,需求:想要將一個文件的數據打印在控制臺上。
源:文件。
目的:控制臺。
流操作的基本規律:
最痛苦的就是流對象有很多,不知道該用哪一個。
通過三個明確來完成。
1,明確源和目的。
源:輸入流。InputStream Reader
目的:輸出流。OutputStream Writer。
2,操作的數據是否是純文本。
是:字符流。
不是:字節流。
3,當體系明確后,在明確要使用哪個具體的對象。
通過設備來進行區分:
源設備:內存,硬盤。鍵盤
目的設備:內存,硬盤,控制臺。
1,將一個文本文件中數據存儲到另一個文件中。復制文件。
源:因為是源,所以使用讀取流。InputStream Reader
是不是操作文本文件。
是!這時就可以選擇Reader
這樣體系就明確了。
接下來明確要使用該體系中的哪個對象。
明確設備:硬盤。上一個文件。
Reader體系中可以操作文件的對象是 FileReader
是否需要提高效率:是!。加入Reader體系中緩沖區 BufferedReader.
FileReader fr = new FileReader("a.txt");
BufferedReader bufr = new BufferedReader(fr);
目的:OutputStream Writer
是否是純文本。
是!Writer。
設備:硬盤,一個文件。
Writer體系中可以操作文件的對象FileWriter。
是否需要提高效率:是!。加入Writer體系中緩沖區 BufferedWriter
FileWriter fw = new FileWriter("b.txt");
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
BufferedReader bufr = new BufferedReader(isr);
目的:OutputStream Writer
是否是存文本?是!Writer。
設備:硬盤。一個文件。使用 FileWriter。
FileWriter fw = new FileWriter("c.txt");
需要提高效率嗎?需要。
BufferedWriter bufw = new BufferedWriter(fw);
**************
擴展一下,想要把錄入的數據按照指定的編碼表(utf-8),將數據存到文件中。
目的:OutputStream Writer
是否是存文本?是!Writer。
設備:硬盤。一個文件。使用 FileWriter。
但是FileWriter是使用的默認編碼表。GBK.
但是存儲時,需要加入指定編碼表utf-8。而指定的編碼表只有轉換流可以指定。
所以要使用的對象是OutputStreamWriter。
而該轉換流對象要接收一個字節輸出流。而且還可以操作的文件的字節輸出流。FileOutputStream
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("d.txt"),"UTF-8");
需要高效嗎?需要。
BufferedWriter bufw = new BufferedWriter(osw);
所以,記住。轉換流什么使用。字符和字節之間的橋梁,通常,涉及到字符編碼轉換時,
需要用到轉換流。
練習:將一個文本數據打印在控制臺上。要按照以上格式自己完成三個明確。
*/
class TransStreamDemo2
{
public static void main(String[] args) throws IOException
{
System.setIn(new FileInputStream("PersonDemo.java"));
System.setOut(new PrintStream("zzz.txt"));
//鍵盤的最常見寫法。
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
bufr.close();
}
}
1,
源:鍵盤錄入。
目的:控制臺。
2,需求:想把鍵盤錄入的數據存儲到一個文件中。
源:鍵盤。
目的:文件。
3,需求:想要將一個文件的數據打印在控制臺上。
源:文件。
目的:控制臺。
流操作的基本規律:
最痛苦的就是流對象有很多,不知道該用哪一個。
通過三個明確來完成。
1,明確源和目的。
源:輸入流。InputStream Reader
目的:輸出流。OutputStream Writer。
2,操作的數據是否是純文本。
是:字符流。
不是:字節流。
3,當體系明確后,在明確要使用哪個具體的對象。
通過設備來進行區分:
源設備:內存,硬盤。鍵盤
目的設備:內存,硬盤,控制臺。
1,將一個文本文件中數據存儲到另一個文件中。復制文件。
源:因為是源,所以使用讀取流。InputStream Reader
是不是操作文本文件。
是!這時就可以選擇Reader
這樣體系就明確了。
接下來明確要使用該體系中的哪個對象。
明確設備:硬盤。上一個文件。
Reader體系中可以操作文件的對象是 FileReader
是否需要提高效率:是!。加入Reader體系中緩沖區 BufferedReader.
FileReader fr = new FileReader("a.txt");
BufferedReader bufr = new BufferedReader(fr);
目的:OutputStream Writer
是否是純文本。
是!Writer。
設備:硬盤,一個文件。
Writer體系中可以操作文件的對象FileWriter。
是否需要提高效率:是!。加入Writer體系中緩沖區 BufferedWriter
FileWriter fw = new FileWriter("b.txt");
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
BufferedReader bufr = new BufferedReader(isr);
目的:OutputStream Writer
是否是存文本?是!Writer。
設備:硬盤。一個文件。使用 FileWriter。
FileWriter fw = new FileWriter("c.txt");
需要提高效率嗎?需要。
BufferedWriter bufw = new BufferedWriter(fw);
**************
擴展一下,想要把錄入的數據按照指定的編碼表(utf-8),將數據存到文件中。
目的:OutputStream Writer
是否是存文本?是!Writer。
設備:硬盤。一個文件。使用 FileWriter。
但是FileWriter是使用的默認編碼表。GBK.
但是存儲時,需要加入指定編碼表utf-8。而指定的編碼表只有轉換流可以指定。
所以要使用的對象是OutputStreamWriter。
而該轉換流對象要接收一個字節輸出流。而且還可以操作的文件的字節輸出流。FileOutputStream
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("d.txt"),"UTF-8");
需要高效嗎?需要。
BufferedWriter bufw = new BufferedWriter(osw);
所以,記住。轉換流什么使用。字符和字節之間的橋梁,通常,涉及到字符編碼轉換時,
需要用到轉換流。
練習:將一個文本數據打印在控制臺上。要按照以上格式自己完成三個明確。
*/
class TransStreamDemo2
{
public static void main(String[] args) throws IOException
{
System.setIn(new FileInputStream("PersonDemo.java"));
System.setOut(new PrintStream("zzz.txt"));
//鍵盤的最常見寫法。
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
bufr.close();
}
}
posted on 2013-07-07 23:26 山村老表 閱讀(138) 評論(0) 編輯 收藏 所屬分類: JavaEE