天天看點

第二十一章 IO流1

21.1 位元組流與字元流

位元組流:按基本元素位元組讀寫的流

  抽象基類:InputStream,OutputStream

字元流:與編碼表結合,按字元讀寫的流

  抽象基類:Reader,Writer

21.2 FileWriter

繼承關系:Writer-OutputStream-FileWriter

FileWriter fw = new FileWriter("x:/xx/xx");

檔案不存在時自動建立,檔案存在時覆寫原檔案

21.3 換行和續寫

換行/r(windows) /n(Unix)

建議調用System.getProperty("LINE_SEPRATER");

write方法覆寫原資料,續寫時設定追加參數為true。

FileWriter fw = new FileWriter("x:/xx/xx", true);

21.4 IO異常處理

為了友善異常處理,在catch和finally中調用,在try語句塊外聲明

FileWriter fw = null;

try{

//code

}catch(IOException e){

//code

}finally{

if(fw != null)

fw.close();

}

21.5 FileReader讀取方法

1.read();讀取一個字元,結束時傳回-1

2.

char[] buf = new char[3];

int num = fr.read(buf);

讀取字元數組

21.6 緩沖區讀寫

FileWriter fw = new FileWriter("xxx.txt");

BufferedWriter bfw = new BufferedWriter(fw);

bufw.write("abc");

bufw.close();

//緩沖區關閉時,其對應的流也關閉

26.7 裝飾設計模式

BufferedReader & BufferedWriter其實是一種裝飾模式。

在Reader與Writer的基礎上對其所具備的功能進行強化

BufferedReader br = new BufferedReader (Reader);

裝飾與繼承的差別:

隻是為了增強或提高效率進行繼承,會使內建體系越發臃腫、複雜。

裝飾使用更為靈活。

同時裝飾與被裝飾類之間不具備抽象關系。

26.8 LineNumberReader

getLineNumber();

setLineNumber();

26.9 操作檔案

FileInputStream & FileOutputStream操作位元組流,不受檔案格式限制。  

其可以使用緩沖類 BufferedInputStream & BufferedOutputStream