java提高篇(一)拓展篇 java知識彙總---IO流的使用規律總結(含程式碼示例)淺顯易懂
阿新 • • 發佈:2019-02-17
IO流的使用規律總結。
解決的問題,就是在開發過程中具體要使用哪個流物件的問題。
1,明確 資料來源,資料匯(資料的目的)
其實就是在明確要使用的IO體系,InputStream OutputStream Reader Writer
需求中操作的是源:意味著是 讀。
InputStream Reader
需求中操作的是 目的: 意味著是 寫
OutputStream Writer
2,明確 操作的資料是否是存文字資料?
是使用字元流
否位元組流
是並且是源。Reader
是並且是目的 。Writer
通過前兩個明確,明確了具體要使用的體系。
接下來應該明確具體的體系中要使用哪個物件。
3,明確 要操作的具體裝置。每個裝置都有對應的流物件。
源裝置:
硬碟,能操作File的流物件都是。File開頭。、
鍵盤,System.in。
記憶體,陣列。
網路,socket流。
目的裝置:
硬碟,能操作File的流物件都是。File開頭。、
顯示器,System.out。
記憶體,陣列。
網路,socket流。
到第三步明確就可以找到具體的流物件了。
4,要明確是否需要額外功能?
需要高效嗎? 用緩衝區,Buffered開頭的。
需要編碼轉換嗎? 轉換流。
------------------------------------------------------
下面通過具體的需求,來利用上面的規律來確定流物件。
需求1:通過鍵盤錄入資料,將資料儲存到一個檔案中。
明確一:用原始碼?有, 有目的嗎? 有。
源:InputStream Reader
目的:OutputStream Writer
明確二:是存文字資料嗎? 是
源:Reader
目的:Writer
明確三:具體裝置。
源裝置:鍵盤, System.in
目的裝置:硬碟 操作File
通過上面三步明確大致可以確認
InputStream is=System.in;//源物件
FileWriter fw=new FileWriter("a.txt");//目的物件。
//將讀取的位元組儲存到陣列中 read(byte[])
//將位元組陣列轉換成字串。
//通過fw.write(String)寫入到檔案中。
//但是這樣做比較麻煩,因為要明確的源是Reader ,需要將位元組流轉成字元流,這樣操作文字就便捷了。
明確四:需要功能嗎?
需要。 轉換 位元組-->字元。InputStreamReader
InputStreamReader isr=new InputStreamReader(System.in);
FileWriter fw=new FileWriter("a.txt");
//一次讀取一個字元,將讀到的字元寫入。當然也可以定義字元陣列緩衝區。
需要其他功能嗎?
需要,高效。 Buffered
所以最終的流物件可以確認了。
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
BUfferedWriter bufw=new BufferedWriter(new FileWriter("a.txt"));
//line=readLine();
下面是操作程式的結果。
解決的問題,就是在開發過程中具體要使用哪個流物件的問題。
1,明確 資料來源,資料匯(資料的目的)
其實就是在明確要使用的IO體系,InputStream OutputStream Reader Writer
需求中操作的是源:意味著是 讀。
InputStream Reader
需求中操作的是 目的: 意味著是 寫
OutputStream Writer
2,明確 操作的資料是否是存文字資料?
是使用字元流
否位元組流
是並且是源。Reader
是並且是目的 。Writer
通過前兩個明確,明確了具體要使用的體系。
接下來應該明確具體的體系中要使用哪個物件。
3,明確 要操作的具體裝置。每個裝置都有對應的流物件。
源裝置:
硬碟,能操作File的流物件都是。File開頭。、
鍵盤,System.in。
記憶體,陣列。
網路,socket流。
目的裝置:
硬碟,能操作File的流物件都是。File開頭。、
顯示器,System.out。
記憶體,陣列。
網路,socket流。
到第三步明確就可以找到具體的流物件了。
4,要明確是否需要額外功能?
需要高效嗎? 用緩衝區,Buffered開頭的。
需要編碼轉換嗎? 轉換流。
------------------------------------------------------
下面通過具體的需求,來利用上面的規律來確定流物件。
需求1:通過鍵盤錄入資料,將資料儲存到一個檔案中。
明確一:用原始碼?有, 有目的嗎? 有。
源:InputStream Reader
目的:OutputStream Writer
明確二:是存文字資料嗎? 是
源:Reader
目的:Writer
明確三:具體裝置。
源裝置:鍵盤, System.in
目的裝置:硬碟 操作File
通過上面三步明確大致可以確認
InputStream is=System.in;//源物件
FileWriter fw=new FileWriter("a.txt");//目的物件。
//將讀取的位元組儲存到陣列中 read(byte[])
//將位元組陣列轉換成字串。
//通過fw.write(String)寫入到檔案中。
//但是這樣做比較麻煩,因為要明確的源是Reader ,需要將位元組流轉成字元流,這樣操作文字就便捷了。
明確四:需要功能嗎?
需要。 轉換 位元組-->字元。InputStreamReader
InputStreamReader isr=new InputStreamReader(System.in);
FileWriter fw=new FileWriter("a.txt");
//一次讀取一個字元,將讀到的字元寫入。當然也可以定義字元陣列緩衝區。
需要其他功能嗎?
需要,高效。 Buffered
所以最終的流物件可以確認了。
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
BUfferedWriter bufw=new BufferedWriter(new FileWriter("a.txt"));
//line=readLine();
//bufw.write(String);bufw.flush();
下面把需求一的程式碼寫出來以供大家學習。
package 練習; import java.io.*; public class keyReader { public static void main(String[] args) throws IOException { keyReade(); } private static void keyReade() throws IOException { System.out.println("請用鍵盤輸入你要錄入的資訊"); //1,通過IO流操作規律明確流物件 BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bufw=new BufferedWriter(new FileWriter("我的資料夾\\fos.txt")); String line=null; line=bufr.readLine(); bufw.write(line); bufw.newLine();//換行。 bufw.flush(); /* //想要迴圈的列印一行話,用下面的方法。 for(int i=1;i<5;i++){ bufw.write(line); bufw.newLine();//換行。 bufw.flush(); }*/ bufw.close(); bufr.close(); } }
下面是操作程式的結果。
我也是剛學不久,這些全是我自己總結的,有不足之處還望體諒。日後我會用自己有限的能力為大家做出更多的總結。
愛分享,愛生活。