1. 程式人生 > 其它 >FileInputStream&FileOutputStream檔案複製後文件變大

FileInputStream&FileOutputStream檔案複製後文件變大

異常名稱:無(執行不報任何異常)
//異常分析:測試檔名:123.txt
// 內容以utf-8編碼編寫的資料為:abc
// 讀寫操作後文件內容為
// 複製檔案內容第一次:NUL*6144(空)
// 複製檔案內容第一次:NUL*1,024(空)
// 複製檔案內容第一次:NUL*911(空)

// 原檔案大小:6 位元組
// 複製檔案大小第一次:6.00 KB (6,144 位元組)
// 複製檔案大小第二次:1.00 KB (1,024 位元組)
// 複製檔案大小第三次:911 位元組
//問題原因:一次讀多個位元組,寫多個位元組的方式複製檔案,注意寫每次讀取到的有效位元組個數
//錯誤程式碼:
/**
 * 程式碼執行不報任何異常,但檔案一讀一寫複製檔案後,檔案大小會變大
 * 異常程式碼如下:
 * */
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class test {
    public static void main(String[] args) throws IOException {
        //建立輸入流
        FileInputStream fis = new FileInputStream("F:\\JavaTest\\File\\123.txt");
        
//建立輸出流 FileOutputStream fos = new FileOutputStream("F:\\JavaTest\\File\\out\\複製.txt"); //一次讀取多個位元組 byte[] bytes = new byte[1024]; int len; while((len = fis.read()) != -1){ //一次寫出多個位元組 fos.write(bytes); } //關流釋放資源(先開後關) fos.close(); fis.close(); } }

正確程式碼及解決方案:

/**
 * 正確程式碼如下
 * */
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class test {
    public static void main(String[] args) throws IOException {
        //建立輸入流
        FileInputStream fis = new FileInputStream("F:\\JavaTest\\File\\123.txt");
        //建立輸出流
        FileOutputStream fos = new FileOutputStream("F:\\JavaTest\\File\\out\\複製.txt");
        //一次讀取多個位元組
        byte[] bytes = new byte[1024];
        int len;
        while((len = fis.read(bytes)) != -1){//第一處錯誤
            //一次寫出多個位元組
            fos.write(bytes,0,len);//第二處錯誤
        }
        //關流釋放資源(先開後關)
        fos.close();
        fis.close();
    }
}

//解決結果:成功!
//錯誤等級:低階