用线程来求文件复制的进度
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Q3 extends Thread {
static double bytex;//原文件总大小
static double newbytes;//复制文件大小
public static void copy2(File source, File dir) {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream(source));
bos = new BufferedOutputStream(new FileOutputStream(dir));//完成初始化
bytex = source.length();
int len = 0;
byte[] bytes = new byte[1024 * 1024];//定义一个byte型数组,用来充当复制过程的中间数组,储存缓冲数据
while ((len = bis.read(bytes)) != -1) {//当read方法返回-1 ,表示文件结尾
bos.write(bytes, 0, len);//从指定的字节数组bytes写入(len-0)个字节
newbytes = dir.length();
}
bos.close();
bis.close();//关流
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 用副线程来求文件复制进度
*/
@Override
public void run() {
double d = newbytes / bytex;
if (!"100.0%".equals(d)) {
System.out.println(d);
}
}
public static void main(String[] args) throws IOException, InterruptedException {
File f1 = new File("C:\\Users\\Jack Smith\\Desktop\\Lyric\\2016年圣诞特辑.mp4");
File f2 = new File("C:\\Users\\Jack Smith\\Desktop\\新建文件夹\\2016年圣诞特辑.mp4");
new Q3().start();
copy2(f1, f2);
}
}
注:
原创代码,如有雷同,纯属巧合
代码有许多不足,欢迎留言讨论和更正