Java 带有Apache FileUtils.copyDirectory(…)的进度条
有人知道为Apache的Java 带有Apache FileUtils.copyDirectory(…)的进度条,java,apache-commons,apache-commons-io,fileutils,Java,Apache Commons,Apache Commons Io,Fileutils,有人知道为Apache的FileUtils.copyDirectory(文件src,文件dst)实现进度条的方法吗?我在和API中看不到任何有用的东西。似乎是处理批处理磁盘操作的常见用例,因此我不确定是否遗漏了一些明显的内容。我想您必须自己完成这项工作。我认为这是一个立竿见影的解决办法: 找到要复制的所有文件,然后首先计算数量或总文件大小(取决于进度条应测量的内容) 使用FileFilter作为回调来复制文件,并将其“滥用”,以将进度告知进度栏 对于任何感兴趣的人,我都是通过处理FileUtil
FileUtils.copyDirectory(文件src,文件dst)
实现进度条的方法吗?我在和API中看不到任何有用的东西。似乎是处理批处理磁盘操作的常见用例,因此我不确定是否遗漏了一些明显的内容。我想您必须自己完成这项工作。我认为这是一个立竿见影的解决办法:
FileFilter
作为回调来复制文件,并将其“滥用”,以将进度告知进度栏对于任何感兴趣的人,我都是通过处理FileUtils中的
doCopyFile
方法以及由此产生的两种方法来实现的。然后我将它们粘贴到一个新类中,这样我就可以编辑这些方法,而不仅仅是使用固定的FileUtils方法
然后我更改了doCopyFile
方法的这一部分:
pos += output.transferFrom(input, pos, count);
对此:(每次清空缓冲区时更新进度条,这不是最好的方法)
为了获得更好的方式,副本将在不同的线程中运行,并且将在EDT中更新进度条(使用
ByTestTransfered
值和正在复制的文件的总大小):
然后使用以下内容更新EDT fire事件上的进度条:
ProgressBar.setValue((int) Math.floor((100.0 / totalSizeOfFiles) * bytesTransferedTotal));
是的,我想
FileFilter
可以做到这一点。讨厌,但工作和更好,然后重写整个方法,所以我会接受它随时:)
long bytesTransfered = output.transferFrom(input, pos, count);
pos += bytesTransfered;
bytesTransferedTotal += bytesTransfered;
ProgressBar.setValue((int) Math.floor((100.0 / totalSizeOfFiles) * bytesTransferedTotal));