1. 程式人生 > >java提高篇(一)拓展篇 java知識彙總---IO流的使用規律總結(含程式碼示例)淺顯易懂

java提高篇(一)拓展篇 java知識彙總---IO流的使用規律總結(含程式碼示例)淺顯易懂

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();

//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();
	}

}

下面是操作程式的結果。

我也是剛學不久,這些全是我自己總結的,有不足之處還望體諒。日後我會用自己有限的能力為大家做出更多的總結。

愛分享,愛生活。