一尘不染

如何使用FileChannels transferFrom()方法监视进度(JProgressBar)?

java

我需要有关该JProgressBar组件的一些帮助。我的程序使用将文件从一个位置复制到另一个位置java.nio FileChannels。实际的复制方法是transferFrom()

我现在有两个问题。

  1. 如何监视FileChannel的传输进度?我发现的所有教程都使用常规的java.io InputStreams并在循环遍历inputstream时提高了int的进度。

  2. 我的复制方法(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 !非常感谢您的投入!现在可以监视单个文件的进度了,让我们解决第二个问题。


我想要(不必,我)不仅监视单个文件的进度,而且监视一堆文件的进度。我的主要复制方法遍历各种目录,并通过调用实际的传输方法来复制适当的文件。因此,复制方法不会传输文件,它们只是为实际传输方法选择文件。


阅读 323

收藏
2020-12-03

共1个答案

一尘不染

无法监视的单个调用的进度transferFrom,但是由于可以传递offset和length参数,因此可以围绕它实现自己的循环,并在合适大小的数据块之间更新进度条。

2020-12-03