使用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秒
转载注明出处
相关文章推荐
- 使用Java复制文件并在控制台显示文件进度
- Java复制文件使用进度条显示
- 使用C#在进度条中显示复制文件的进度
- 使用C#在进度条中显示复制文件的进度
- 复制文件时,如何显示进度条(使用BlockRead函数读取数据,并插入application.ProcessMessages)
- [懵懂边缘]使用C#在进度条中显示复制文件的进度
- 使用C#在进度条中显示复制文件的进度(转)
- 使用C#在进度条中显示复制文件的进度
- 使用C#在进度条中显示复制文件的进度
- 使用C#在进度条中显示复制文件的进度
- 使用C#在进度条中显示复制文件的进度
- 使用C#在进度条中显示复制文件的进度
- 使用API函数复制文件,可显示进度。
- 使用C#在进度条中显示复制文件的进度
- 使用C#在进度条中显示复制文件的进度
- Java实现在复制文件时使用进度条
- 复制文件时,如何显示进度条(使用TFileStream一点一点读,或者使用BlockRead)
- 使用C#在进度条中显示复制文件的进度
- java实现在复制文件时使用进度条(java实现进度条)
- 使用C#在进度条中显示复制文件的进度