黑馬程式設計師----Java基礎基礎之IO流
------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a>、期待與您交流! ---------
IO流用來處理裝置之間的資料傳輸
java對資料的操作是通過流的方式
Java用於操作流的物件都在io包中
liu按照操作資料型別分為兩種:位元組流於字元流
流按流向分為:輸出流,輸入流
位元組流的抽象基類 InputStream OutputStream
字元流的抽象基類:Reader Writer
先學習一下字元流的特點.
既然io流是用於操作資料的,那麼資料最常見的體現形式是:檔案
需求:在硬碟上建立一個檔案並寫入一些資料.
找到一個專門用於操作檔案的Writer的子類物件.FileWriter.字尾名是父類名,字首名是該流物件的功能
FileWriter fw = new FileWriter("檔名",true);
傳遞一個true的引數,表示不覆蓋已有的檔案,並在已有檔案的末尾處進行資料續寫
換行操作符: \r\n
檔案讀取流:
定義一個字元陣列,用於儲存到字元
方法read(char[])返回的是讀到的字元個數
讀取流的另一種讀取檔案的方法:
char[] buf = new char[1024];
int len = 0;
while((len=fw.read(buf))!=-1)
String str = new String(buf,0,len);
字元流緩衝區:
緩衝區的出現提高了對資料的讀寫效率
對應的類: BuffferWriter BufferReader
緩衝區要結合流才可以使用.
在流的基礎上對流的功能進行了增強
緩衝區的出現是為了提高流的操作效率而出現的.所以在建立流物件之前,必須要有流物件
bufw.newLine()緩衝區特有的換行操作
字元讀取流緩衝區:
該緩衝區提供了一個一次讀一行的方法readLine,方便於對文字資料的獲取.
當返回null時,表示讀取到檔案末尾
String line = null;
while((line=bufr.readLine())!=null)
System.out.println(line);
readLine方法返回的時候只返回回車符之前的資料內容,並不返回回車符
所以在讀取一行之後應該執行換行(bufr.newLine())和重新整理(bufr.flush())動作
裝飾設計模式
當想要對已有的物件進行功能的增強時,可以定義類,將已有物件傳入,基於已有的功能,並提供加強功能.那麼自定義的該類稱為裝飾類
裝飾類通常會通過構造方法接受被裝飾的物件.並基於被裝飾的物件功能,提供更強的功能
裝飾模式比繼承要靈活,避免了繼承體系的臃腫,而且降低了類與類之間的關係
裝飾類因為增強已有物件,具備的功能和已有的是相同的,只不過提供了更強功能
所以裝飾類和被裝飾類通常是屬於一個體系中的
LineNumberReader:跟蹤行號的緩衝字元輸入流
FileReader fw = new FileReader("Demo.txt");
LineNumberReader lnr = new LineNumberReader(fw);
String line = null;
while((line=inr.readLine()))
System.out.println(inr.getLineNumber()+"::"+line);
inr.close();
讀取鍵盤錄入:
System.out:對應的是標準的輸出裝置:控制檯
System.in:對應的是標準的輸入裝置:鍵盤
流操作的基本規律
通過三個明確來完成:
1.明確源和目的.
源: 輸入流 InputStream Reader
目的: 輸出流 OutputStream Writer
2.操作資料是否是純文字
是: 字元流
不是: 位元組流
3.當體系明確後,在明確要使用那個具體的物件
通過裝置來進行區分:
源裝置:記憶體,硬碟,鍵盤
目的裝置:記憶體,硬碟,控制檯
例如:將一個文字檔案中的資料儲存到另一個檔案中,複製檔案.
源:因為是源,所以使用讀取流.InputStream, Reader
是不是操作文字檔案
是:所以選擇Reader, 這樣體系就明確啦!
接下來明確要使用該體系中的那個物件.
明確裝置:硬碟,上一個檔案
Reader體系中可以操作檔案的物件是FileReader
是否提高效率:是,加入Reader體系中的緩衝區,BufferedReader
目的:
是否是純文字
是:Writer
裝置:硬碟,一個檔案
Writer體系中可以操作檔案的物件是FileWriter
是否提高效率:是,加入Writer體系中的緩衝區,BufferedWriter