IO流 檔案字元流FileReader、FlieWriter

向陽的人生發表於2020-11-17

FileReader、FileWrite

FileReader、FlieWriter用法與FileInputStream、FileOutputStream用法基本一致,區別時前者為字元IO流、後者為位元組IO流

建立緩衝區複製檔案

除了“讀一個字元,寫一個字元”的方法複製檔案外,我們還可以利用緩衝區複製檔案,建立一個陣列暫時儲存讀入字元,然後將陣列內容寫入檔案,這樣複製檔案效率更高!
例項

import java.io.*;

public class Test02 {
    public static void main(String[] args) throws IOException {
        File file1 = new File("D:\\test\\a\\test01.txt");  //確定讀目標
        File file2 = new File("D:\\test\\a\\test02.txt");  //確定寫目標

        FileReader fileReader = new FileReader(file1);   //建立 檔案———》程式 IO流
        FileWriter fileWriter = new FileWriter(file2); ///建立 程式--》檔案 IO流

        char[] ch = new char[4];     //建立一個字元陣列作為緩衝區
        int len = fileReader.read(ch);    //讀陣列

        while (len!=-1){
            fileWriter.write(ch);   //陣列內容全部寫入
            len = fileReader.read(ch);   //下一次讀取陣列
        }

        fileWriter.close();   //關閉IO流
        fileReader.close();
    }
}

結果
在這裡插入圖片描述

可以看到結果並不是我們所預期的

原因是

在這裡插入圖片描述

所以上一次未被覆蓋的“1”也寫入了檔案,所以結果為“你好,123!1”

修改後程式碼

import java.io.*;

public class Test02 {
    public static void main(String[] args) throws IOException {
        File file1 = new File("D:\\test\\a\\test01.txt");  //確定讀目標
        File file2 = new File("D:\\test\\a\\test02.txt");  //確定寫目標

        FileReader fileReader = new FileReader(file1);   //建立 檔案———》程式 IO流
        FileWriter fileWriter = new FileWriter(file2); ///建立 程式--》檔案 IO流

        char[] ch = new char[4];     //建立一個字元陣列作為緩衝區
        int len = fileReader.read(ch);    //讀陣列

        while (len!=-1){     //陣列內容寫入
            fileWriter.write(ch,0,len); //[0,len)
            len = fileReader.read(ch);   //下一次讀取陣列
        }
        fileWriter.close();   //關閉IO流
        fileReader.close();
    }
}

結果為
在這裡插入圖片描述

相關文章