使用Java复制文件及显示进度
最近在学Java,今天搞了一个复制文件的代码,主要是通过BufferedInputStream和BufferedOutputStream对文件进行复制
没什么技术含量,不过进过我的测试发现,对于1G以上的文件,复制时byte[]数组的大小越大越快,对于小于1G的文件,byte[]数组
的大小在5M左右最快,今本人测试,比Windows的复制最多要快40秒。好了,上代码
/**
使用Java复制文件及显示进度
Author:ylqHUST
*/
import java.io.*;
public class Copy
{
public static void main(String[] args)throws Exception//异常直接抛出去了,自己玩玩就不处理了
{
FileInputStream fis=new FileInputStream("../BT5R3-KDE-32.iso");//要复制文件的路径
FileOutputStream fos=new FileOutputStream("BT5R3-KDE-32.iso");//要把文件复制到哪里的路径
BufferedInputStream bufis=new BufferedInputStream(fis);
BufferedOutputStream bufos=new BufferedOutputStream(fos);
byte[] by=new byte[1024*1024*150];//byte[]数组的大小,根据复制文件的大小可以调整,1G一下可以5M。1G以上150M,自己多试试
int len;
boolean flag=true;
long f=System.nanoTime();
double begin=bufis.available();
while(flag)
{
len=bufis.read(by);
if(len==-1)
{
flag=false;
continue;
}
bufos.write(by,0,len);
bufos.flush();
System.out.print("\r \r"+(1-bufis.available()/begin)*100+"%");//显示进度,如果文件过大
//(2G以上,可能一开始会一直显示0.0%,因为算出的数据过小,丢失了,不过还是在复制,要等等
}
bufos.close();
bufis.close();
long e=System.nanoTime();
System.out.println("\n用时"+(e-f)/1000000000+"秒");//显示总用时
}
}
//上面测试的一个3G左右的文件,用了120秒
转载注明出处