public class FileCopyByThread extends Thread{
private File source;
private File target;
/**文件总大小*/
private double totalSize;
/**当前已拷贝大小*/
private double currentSize;
public FileCopyByThread(File source, File target) {
super();
this.source = source;
this.target = target;
}
@Override
public void run() {
try(
FileInputStream fis = new FileInputStream(source);
FileOutputStream fos = new FileOutputStream(target);
){
//获取文件的实际大小
totalSize = source.length();
byte[] b = new byte[1024];
int len = 0;
System.out.println(getName()+"开始拷贝:"+source.getName());
//创建并启动进度监控的线程
ProgressListener pl = new ProgressListener();
//设置当前线程为守护线程
pl.setDaemon(true);
pl.start();
while((len = fis.read(b)) != -1) {
fos.write(b, 0, len);
//每次循环类增已拷贝的字节
currentSize += len;
}
System.out.println(getName()+"拷贝完成!");
}catch (IOException e) {
e.printStackTrace();
}
}
/*
* 计算文件拷贝的线程
* @author
*/
class ProgressListener extends Thread{
@Override
public void run() {
while(true) {
//计算进度
double d = currentSize / totalSize;
//将浮点进度格式化为百分比
String progress = NumberFormat.getPercentInstance().format(d);
System.out.println("拷贝进度------->"+progress);
try {
sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args){
File source = new File ("d:\\.......");
File target = new File("d:\\........");
//启动文件拷贝进程
new FileCopyByThread(source,target).start();
}
}
java线程实现文件拷贝,同时记录拷贝进度
最新推荐文章于 2021-07-25 20:04:21 发布