1. 程式人生 > >java io詳解四:字元輸入輸出流

java io詳解四:字元輸入輸出流

那麼這篇部落格我們講的是位元組輸入輸出流:Reader、Writer(下圖紅色長方形框內),紅色橢圓框內是其典型實現(FileReader、FileWriter)

  

①、為什麼要使用字元流?

  因為使用位元組流操作漢字或特殊符號語言的時候容易亂碼,因為漢字不止一個位元組,為了解決這個問題,建議使用字元流。

②、什麼情況下使用字元流?

  一般可以用記事本開啟的檔案,我們可以看到內容不亂碼的。就是文字檔案,可以使用字元流。而操作二進位制檔案(比如圖片、音訊、視訊)必須使用位元組流

 

 1、字元輸出流:FileWriter

1

2

3

public abstract class Writer

  extends Object

  implements Appendable, Closeable, Flushable

  用於寫入字元流的抽象類

  方法摘要:

  

  下面我們用 字元輸出流 Writer  的典型實現 FileWriter 來介紹這個類的用法:

//1、建立源
        File srcFile = new File("io"+File.separator+"a.txt");
        //2、建立字元輸出流物件
        Writer out = new FileWriter(srcFile);
        //3、具體的 IO 操作
            /***
             * void write(int c):向外寫出一個字元
             * void write(char[] buffer):向外寫出多個字元 buffer
             * void write(char[] buffer,int off,int len):把 buffer 陣列中從索引 off 開始到 len個長度的資料寫出去
             * void write(String str):向外寫出一個字串
             */
        //void write(int c):向外寫出一個字元
        out.write(65);//將 A 寫入 a.txt 檔案中
        //void write(char[] buffer):向外寫出多個字元 buffer
        out.write("Aa帥鍋".toCharArray());//將 Aa帥鍋 寫入 a.txt 檔案中
        //void write(char[] buffer,int off,int len)
        out.write("Aa帥鍋".toCharArray(),0,2);//將 Aa 寫入a.txt檔案中
        //void write(String str):向外寫出一個字串
        out.write("Aa帥鍋");//將 Aa帥鍋 寫入 a.txt 檔案中
         
        //4、關閉流資源
        /***
         * 注意如果這裡有一個 緩衝的概念,如果寫入檔案的資料沒有達到緩衝的陣列長度,那麼資料是不會寫入到檔案中的
         * 解決辦法:手動重新整理緩衝區 flush()
         * 或者直接呼叫 close() 方法,這個方法會預設重新整理緩衝區
         */
        out.flush();
        out.close();

 2、字元輸入流:Reader

1

2

3

public abstract class Reader

  extends Object

  implements Readable, Closeable

  用於讀取字元流的抽象類。

  方法摘要:

  

  下面我們用 字元輸入流 Reader  的典型實現 FileReader 來介紹這個類的用法:

//1、建立源
        File srcFile = new File("io"+File.separator+"a.txt");
        //2、建立字元輸出流物件
        Reader in = new FileReader(srcFile);
        //3、具體的 IO 操作
            /***
             * int read():每次讀取一個字元,讀到最後返回 -1
             * int read(char[] buffer):將字元讀進字元陣列,返回結果為讀取的字元數
             * int read(char[] buffer,int off,int len):將讀取的字元儲存進字元陣列 buffer,返回結果為讀取的字元數,從索引 off 開始,長度為 len
             *
             */
        //int read():每次讀取一個字元,讀到最後返回 -1
        int len = -1;//定義當前讀取字元的數量
        while((len = in.read())!=-1){
            //列印 a.txt 檔案中所有內容
            System.out.print((char)len);
        }
         
        //int read(char[] buffer):將字元讀進字元陣列
        char[] buffer = new char[10]; //每次讀取 10 個字元
        while((len=in.read(buffer))!=-1){
            System.out.println(new String(buffer,0,len));
        }
         
        //int read(char[] buffer,int off,int len)
        while((len=in.read(buffer,0,10))!=-1){
            System.out.println(new String(buffer,0,len));
        }
        //4、關閉流資源
        in.close();

 3、用字元流完成檔案的複製

/**
         * 將 a.txt 檔案 複製到 b.txt 中
         */
        //1、建立源和目標
        File srcFile = new File("io"+File.separator+"a.txt");
        File descFile = new File("io"+File.separator+"b.txt");
        //2、建立字元輸入輸出流物件
        Reader in = new FileReader(srcFile);
        Writer out = new FileWriter(descFile);
        //3、讀取和寫入操作
        char[] buffer = new char[10];//建立一個容量為 10 的字元陣列,儲存已經讀取的資料
        int len = -1;//表示已經讀取了多少個位元組,如果是 -1,表示已經讀取到檔案的末尾
        while((len=in.read(buffer))!=-1){
            out.write(buffer, 0, len);
        }
         
        //4、關閉流資源
        out.close();
        in.close();

本文轉載自:https://www.cnblogs.com/ysocean/p/6859242.html