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

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

转载注明出处

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值