1. 程式人生 > >Java IO5:字元流

Java IO5:字元流

字元流

        位元組流提供了處理任何型別輸入/輸出操作的功能(因為對於計算機而言,一切都是0和1,只需把資料以位元組形式表示就夠了),但它們不可以直接操作Unicode字元,一個Unicode字元佔用2個位元組,而位元組流一次只能操作一個位元組。既然Java的口號就是"一次編寫、處處執行",那麼包含直接的字元輸入/輸出的支援是必要的。因此就有一些字元輸入/輸出流,之前已經說明過了,字元流頂層是Reader和Writer這兩個抽象類,因此就從這裡開始本文。

Reader

   Reader是定義Java的字元輸入流的抽象類,該類的所有方法在出錯的情況下都將引發IOException。Reader類中有這些方法:

Writer

       Writer是定義字元輸出流的抽象類,所有該類的方法都返回一個void值並在出錯的條件下引發IOException。Writer類中的方法有:

FileReader和FileWriter

FileReader類建立了一個可以讀取檔案內容的Reader類,最常用的構造方法是:

1、FileReader(String fileName)

2、FileReader(File file)

FileWriter建立了一個可以寫檔案的Writer類,最常用的構造方法是:

1、FileWriter(String fileName)

2、FileWriter(String fileName, boolean append) 

3、FileWriter(File file)

      其中第二個構造方法,如果append為true,那麼輸出是追加到檔案結尾的FileWriter類的建立不依賴檔案是否存在,在建立檔案之前,FileWriter將在建立物件時開啟它來作為輸出。如果試圖開啟一個只讀檔案,那麼將引發一個IOException。看一下FileWriter和FileReader的使用,現在D盤目錄下沒有"writer.txt":

public static void main(String[] args) throws Exception
{
    File file = new File("D:/writer.txt");
    Writer out = new FileWriter(file);
    // 宣告一個String型別物件
    String str = "Hello World!!!";
    out.write(str);
    out.close();
        
    // 讀檔案操作
    Reader in = new FileReader(file);
    // 開闢一個空間用於接收檔案讀進來的資料
    char c0[] = new char[1024];
    int i = 0;
    // 將c0的引用傳遞到read()方法之中,同時此方法返回讀入資料的個數
    i = in.read(c0);
    in.close();
        
    if (-1 == i)
    {
        System.out.println("檔案中無資料");
    }
    else
    {
        System.out.println(new String(c0, 0, i));
    }
}

利用FileWriter和FileReader進行了一次的讀寫操作,先看一下D盤下是否有"writer.txt",假如有"writer.txt"那"writer.txt"中又是什麼:

看來利用FileWriter寫入一個記憶體中的字串到檔案中是成功了,那麼利用利用FileReader讀入檔案中的內容到記憶體呢,看一下執行結果:

Hello World!!!

列印結果和檔案中的內容一致,說明FileReader的操作也成功。

這就是FileWriter和FileReader的使用,和FileOutputStream和FileInputStream的使用差不多,不過實際操作中一般不會用FileWriter和FileReader,這將在下一篇文章進行講解。