使用BufferedInputStream和BufferedOutputStream複製文件,相信大家都已經遊刃有餘了,但是有一個
很嚴重的bug不容小覷,如以下代碼:
package com.yeshide_02;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyMp3 {
public static void main(String[] args) throws IOException {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
bis = new BufferedInputStream(new FileInputStream("D:\\b\\a\\任賢齊 - 花好月圓.mp3"));
bos = new BufferedOutputStream(new FileOutputStream("D:\\music\\任賢齊 - 花好月圓.mp3"));
byte[] bytes = new byte[1024];
int len;
while((len = bis.read()) != -1) {
bos.write(bytes, 0, len);
}
bis.close();
bos.close();
}
}
以上代碼也能複製文件,但是有一個很嚴重的問題在於使用bis讀取文件的時候bis.read()括號裏面少寫了
一個bytes,此時程序不會報錯,但是會導致新複製的文件比原來大1024倍並且新複製的文件也無法被播
放器識別。出現的現象如下所述:
原因分析:
一、沒有把定義的數組參數傳進讀取文件的代碼小括號中,導致寫文件時寫了1024次,故新複製的文件
比原來的大了1024倍。
二、計算機內部存儲的是二進制數字,原因分析一的讀把錯誤的二進制讀進來,導致二進制翻譯成十進
制寫出來過程中出錯,最終導致文件出錯無法打開。
複製其他文件格式的文件也類同,最後把bytes補上括號裏面就可以正常複製文件了。