我需要一些关于 JProgressBar
组件的帮助。我的程序使用 java.nio FileChannels
将文件从一个位置复制到另一个位置。实际的复制方法是 transferFrom()
。
我现在有两个问题:
如何监控 FileChannels 的传输进度?所有我找到的教程都使用传统的 java.io InputStreams 并在循环遍历 inputstream 的同时增加进度 int。
我的复制方法(FileChannel 方法)封装在一个单独的方法中,该方法由迭代源和目标文件夹的其他方法调用,然后为每个文件调用 FileChannel 方法。
如何为整个复制机制实现 ProgressBar ?
好吧,我应该早点阅读 FAQ,所以我想我需要编辑我的初始帖子而不是评论答案,对吗?
这是我到目前为止所做的事情。
就像 jambjo 建议的那样(顺便说一句,谢谢),transferFrom()
方法现在被循环了。
BTW:有什么首选的块大小吗?或者像 EJP 说的那样,它取决于我的进度条的粒度?
这是我的代码片段:
while (position < size) {
position += destination.transferFrom(source, position, chunkSize);
current = (position/size)*100;
System.out.println(current);
}
很不幸,在循环内部'current'的值一直保持在0,我不知道为什么。 我是不是漏掉了什么?
再次感谢jambjo!非常感谢您的建议! 现在单个文件的进度监视已经运作良好,让我们来解决我的第二个问题。
我想,不,我必须监视不止一个文件,而是一大堆文件的进度。 我的主要复制方法遍历各个目录并通过调用实际传输方法来复制适当的文件。 因此,复制方法不会传输文件,它们只是为实际传输方法选择文件。