进度条与Apache FileUtils.copyDirectory(...)(Progress b

2019-09-19 08:19发布

有谁知道实施进度条为Apache的任何方式FileUtils.copyDirectory(File src, File dst) 我没有看到任何东西有用的JavaDoc和API。 似乎是一个常见的情况在处理一批磁盘操作,所以我不知道如果我错过了一些东西明显。

Answer 1:

我想你将不得不自己做。 我看到这立即解决:

  1. 找到你要第一个副本,数数或总文件大小(根据您的进度条应该测量什么)中的所有文件
  2. 使用文件复制FileUtils.copyDirectory(File, File, FileFilter)和“滥用”的FileFilter作为回调通报有关进展到你的进度条


Answer 2:

任何有兴趣,我通过了应对这样做doCopyFile fileutils中的方法和情侣,导致了它的方法。 然后,我将它们放入一个新的类,这样我可以编辑的方法,而不是只使用固定的文件实用程序的方法。

然后,我改变了这部分doCopyFile方法:

pos += output.transferFrom(input, pos, count);

为此:(每个缓冲区被清空时更新进度条,不是最好的方法)

//Split into into deceleration and assignment to count bytes transfered
long bytesTransfered = output.transferFrom(input, pos, count);
//complete original method
pos += bytesTransfered;
//update total bytes copied, so it can be used to calculate progress
bytesTransferedTotal += bytesTransfered;
//your code to update progress bar here
ProgressBar.setValue((int) Math.floor((100.0 / totalSize) * bytesTransferedTotal));

为了更好的方式拷贝会在不同的线程上运行,并且进度条将在美国东部时间(使用更新bytesTransfered值和正在复制的文件的总大小):

long bytesTransfered = output.transferFrom(input, pos, count);
pos += bytesTransfered;
bytesTransferedTotal += bytesTransfered;

然后更新与这样的事情EDT火灾事件的进度条:

ProgressBar.setValue((int) Math.floor((100.0 / totalSizeOfFiles) * bytesTransferedTotal));


文章来源: Progress bar with Apache FileUtils.copyDirectory(…)