FileInputStream&FileOutputStream檔案複製後文件變大
阿新 • • 發佈:2021-06-21
異常名稱:無(執行不報任何異常)
//異常分析:測試檔名: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(); } }
//解決結果:成功!
//錯誤等級:低階