1. 程式人生 > >黑馬程式設計師----Java基礎基礎之IO流

黑馬程式設計師----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