代码:
FileInputStream fis = new FileInputStream(srcfile);
FileOutputStream fos = new FileOutputStream(destfile,true);
byte[] buf = new byte[20*1024];
int b=0;
//从fis中读取数据存放到buf,从0位置开始,读取最长buf.length个字节
while((b = fis.read(buf, 0, buf.length))!=0)
{
//将buf的内容写入fos,从0位置开始,最多写入b个字节
fos.write(buf, 0, buf.length); //write(buf,0,b)
fos.flush();
}
老师写的是write(buf,0,b),但是我运行以后是这样
改成fos.write(buf, 0, buf.length);就可以了
b是你本次读到的字节数,其中b<= buf.length。
读满的时候b= buf.length,读到最后一次的时候很可能b< buf.length,这个时候buf里面一共有b(<buf.length)个字节,你fos.write(buf, 0, buf.length)就数组越界了。
谢谢!粗心写错了
while((b = fis.read(buf, 0, buf.length))!=0) 应该是 while((b = fis.read(buf, 0, buf.length))!=-1)吧