使用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补上括号里面就可以正常复制文件了。