您的位置:首页 > 编程语言 > Java开发

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

2014-12-04 21:36 323 查看

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


转载注明出处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: