Java IO流 实现复制文件多个并显示进度
程序员文章站
2022-08-13 23:11:54
复制文件多个并显示进度实现思路复制线程代码测试类实现效果实现思路因为要复制多个文件,所以要使用线程,在线程中使用io流达到复制文件的效果,使用一个变量来记录已复制的大小,再使用这个变量除以文件大小即可得到复制线程代码下面展示一些 线程代码。class CopyFile extends Thread { //待复制的原文件 public File waitCopy; //粘贴的文件 public File copyTo; //对原文件以及粘贴后的文件进行初...
实现思路
因为要复制多个文件,所以要使用线程,在线程中使用io流达到复制文件的效果,
使用一个变量来记录已复制的大小,再使用这个变量除以文件大小即可得到
复制线程代码
线程类需要继承Thread或者实现Runnable接口 在run函数中执行复制
。
class CopyFile extends Thread {
//待复制的原文件
public File waitCopy;
//粘贴的文件
public File copyTo;
//对原文件以及粘贴后的文件进行初始化
public CopyFile(String waitCopy, String copyTo) {
this.waitCopy =new File(waitCopy);
this.copyTo =new File (copyTo);
}
public void run() {
//文件输入流
FileInputStream fis=null;
//文件输出流
FileOutputStream fos=null;
try {
//用原文件初始化输入流
fis=new FileInputStream(waitCopy);
//用粘贴文件初始化输出流
fos=new FileOutputStream(copyTo);
//设置缓冲大小
byte[] b=new byte[1024];
//用来存储接收到的数据
int a;
//原文件的大小
long len=waitCopy.length();
//已复制的大小
double temp=0;
//用来格式化数据的
DecimalFormat df=new DecimalFormat("##.##%");
//read返回值为-1表示内容已经读完了
while((a=fis.read(b))!=-1){
fos.write(b, 0, a);
//累加上已复制的大小
temp+=a;
//计算出进度百分比
double t=temp/len;
System.out.println(waitCopy.getName()+"复制了"+df.format(t));
}
System.out.println(waitCopy.getName()+"复制完毕");
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
assert fis != null;
//关闭流
fis.close();
assert fos != null;
//关闭流
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
测试类
public class Test {
public static void main(String[] args) {
//参数1为需要复制的文件,参数2是需要将参数1复制到的文件位置
new CopyFile("D:\\a.txt","D:\\c.txt").start();
new CopyFile("D:\\b.txt","D:\\d.txt").start();
}
}
实现效果
本文地址:https://blog.csdn.net/WCWAWSL/article/details/107657946