有谁知道实施进度条为Apache的任何方式FileUtils.copyDirectory(File src, File dst)
我没有看到任何东西有用的JavaDoc和API。 似乎是一个常见的情况在处理一批磁盘操作,所以我不知道如果我错过了一些东西明显。
Answer 1:
我想你将不得不自己做。 我看到这立即解决:
- 找到你要第一个副本,数数或总文件大小(根据您的进度条应该测量什么)中的所有文件
- 使用文件复制
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(…)