public static void copyFile(File scrFile,File destFile) throws IOException{
if(!scrFile.exists()){
throw new IllegalArgumentException("文件"+scrFile+"不存在");
}
if(!scrFile.isFile()){
throw new IllegalAccessError(scrFile+"不是文件");
}
FileInputStream in = new FileInputStream(scrFile);
FileOutputStream out = new FileOutputStream(destFile);
byte [] buf = new byte[8*1024];
int b;
while((b=in.read(buf,0,buf.length))!=-1){
out.write(buf, 0, b);//这个b什么意思?写b个长度的字节吗?但是没有给b赋值啊
out.flush(); //通过将所有已缓冲输出写入底层流来刷新此流
}
in.close();
out.close();
}
如果文件很小,你申请的容量8*1024个byte的数组就已经可以完全装下,很显然那么第一次读就一下把文件读完了;
如果文件很大,你申请的容量一次读取装不完时,那就会有下一次读取,直到读到文件的末尾,此时返回-1,就跳出循环了;
read(buf,0,buf.length)意思是一次最多读取的字节数不超过8*1024,即<=8*1024.
看一下这个方法的官方文档解释,你就会更加明白了.
*Reads up to <code>len</code> bytes of data from this input stream
* into an array of bytes. If <code>len</code> is not zero, the method
* blocks until some input is available; otherwise, no
* bytes are read and <code>0</code> is returned.
b=in.read(buf,0,buf.length)就是在给b赋值,返回一个int 型的数,意思是,read方法从流中一次所读到的字节数.