我需要有关该JProgressBar组件的一些帮助。我的程序使用将文件从一个位置复制到另一个位置java.nio FileChannels。实际的复制方法是transferFrom()。
JProgressBar
java.nio FileChannels
transferFrom()
我现在有两个问题。
如何监视FileChannel的传输进度?我发现的所有教程都使用常规的java.io InputStreams并在循环遍历inputstream时提高了int的进度。
我的复制方法(FileChannel方法)封装在一个单独的方法中,该方法由其他方法反复访问源文件夹和目标文件夹,然后为每个文件调用FileChannel方法。
如何为完整的复制机制实现ProgressBar?
好吧,我应该早点阅读FAQ,所以我想我必须编辑我的初始帖子而不是评论答案,对吗?
好的,这是我到目前为止所做的。就像jambjo建议的(顺便感谢),该transferFrom()方法现在循环了。顺便说一句:是否有更好的块大小,还是像EJP所说的那样,它取决于进度条的粒度吗?
这是我的代码段:
while (position < size) { position += destination.transferFrom(source, position, chunkSize); current = (position/size)*100; System.out.println(current); }
不幸的是,“当前”值在循环内保持为0,我不知道为什么。我想念什么吗?
再次感谢 jambjo !非常感谢您的投入!现在可以监视单个文件的进度了,让我们解决第二个问题。
我想要(不必,我)不仅监视单个文件的进度,而且监视一堆文件的进度。我的主要复制方法遍历各种目录,并通过调用实际的传输方法来复制适当的文件。因此,复制方法不会传输文件,它们只是为实际传输方法选择文件。
无法监视的单个调用的进度transferFrom,但是由于可以传递offset和length参数,因此可以围绕它实现自己的循环,并在合适大小的数据块之间更新进度条。
transferFrom