1. 程式人生 > >Java輸入輸出流與緩衝區的使用

Java輸入輸出流與緩衝區的使用

一,Input/Output流:
將外設中的資料讀取到記憶體中就是輸入。
將記憶體中的資料寫入到外設中就是出。
I/O流就是用來處理裝置間的資料傳輸。用於操作流的物件都放在IO包中。
流按操作方式分為位元組流和字元流。
位元組流能處理所有的資料。
字元流的由來:
其實就是位元組流讀取文字位元組資料後,不直接操作,而是先查指定的編碼表,獲取指定的文字,再對這個文字進行操作。簡單地說即是:字元流=字元流+編碼表。
輸入輸出流的頂層父類:
位元組流:
1,InputStream

2,OutputStream

字元流:
1,Readrer:

2,Writer:
這些體系的子類都以父類名作為字尾。而且子類名的字首就是物件的功能。
從熟悉的文字開始:字元流

將一些文字儲存到硬碟上的資料夾中:
若果要操作文字資料,優先考慮字元流,而且要將資料從記憶體寫到硬碟上,要使用字元流中的輸出流Writer。硬碟資料的基本體現是檔案。
			FileWriter file = new FileWriter("D:\\FileWriterDemo.txt");		//建立檔案輸出流
			file.write("加油");												//向檔案緩衝區寫入資料
			file.flush();													//將緩衝區資料寫入到目標檔案中
			file.write("Hello World!");										//再次向檔案中寫入資料
			file.close();													//關閉輸出流,以後不能再利用該流輸出資料


注意:
1.向硬碟輸出資料需要丟擲IOException異常。
2.Windows 識別的換行標誌是:\r\n   故,需要文字換行時,需要在文字內部新增“\r\n”即可。
例如需要輸出:
加油!
加油。
可以使用語句:file.write("加油!\r\n加油。");
如果建構函式中新增引數true,則可以實現對檔案的續寫功能,再次對檔案進行操作時,是追加的內容而不是覆蓋。
方法如下:FileWriter file = new FileWriter("D:\\FileWriterDemo.txt",true);

讀取:
讀取一個文字檔案,將讀取到的文字列印到控制檯:
				//方法一:
				int ch;
				FileReader filereader = new FileReader("D:\\FileWriterDemo.txt");
				while((ch = filereader.read()) != -1){
				System.out.print((char)ch);
				filereader.close();
				}


				//方法二:
					FileReader filereader = new FileReader("D:\\FileWriterDemo.txt");
					char[] arr = new char [1024];
					int len = 0;
					while((len = filereader.read(arr)) != -1)
					System.out.print(new String(arr,0,len));
					filereader.close();


注意:
1.在建立讀取流物件時,必須要明確被讀取的檔案。並且一定要確定該檔案存在。
2.當讀取到檔案末尾時,如果繼續讀則返回-1.
將C盤的一個文字檔案複製到D盤。
分別定義讀寫操作,從一個檔案讀取,使用寫操作對讀取的資料進行寫的操作。

二,緩衝區的使用:
使用緩衝區寫入檔案:
為了提高寫入的效率,就引入了字元流的緩衝區。
建立一個字元寫入流緩衝區物件,
和指定需要緩衝的物件相關聯。
使用緩衝區的寫入方法將資料寫入到緩衝區中。
使用緩衝區的重新整理方法,將資料重新整理到目的檔案
使用緩衝區的光比方法,關閉相應的緩衝區,關閉緩衝區其實就是關閉流物件。
舉例如下:
			FileWriter filereader = new FileWriter("D:\\BufferedDemo.txt",true);
			BufferedWriter bw = new BufferedWriter(filereader);
			bw.write("\r\n努力加油加油!");
			bw.flush();
			bw.close();


注意:寫入緩衝器中含有一個特殊的方法:newLine()。作用換行。
使用緩衝區讀取檔案:(過程如寫入)
			String str;
			FileReader fr = new FileReader("D:\\BufferedDemo.txt");
			BufferedReader br = new BufferedReader(fr);
			while((str = br.readLine()) != null)
				System.out.println(str);
			br.close();


注意:讀取緩衝器中含有一個特殊的方法:readLine()。作用讀取一行。不包含換行。

緩衝區無非就是定義了一個數組,並對外提供了更多的方法對陣列進行訪問。
其實這些方法最終操作的都是陣列的角標。
緩衝的原理:
其實就是從源中獲取一批資料裝進緩衝區中,再從緩衝區中不斷地取出一個一個的資料。

在此次取完後,再從源中繼續取出下一批資料進入緩衝區。當源中的資料取完後,用-1作為結束標記。