使用Java复制文件及显示进度

来源:互联网 发布:asio mac驱动 编辑:程序博客网 时间:2024/04/28 10:27

使用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秒

转载注明出处

0 0