当前位置: 首页 > 面试题库 >

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

赵英哲
2023-03-14
问题内容

我需要有关该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 !非常感谢您的投入!现在可以监视单个文件的进度了,让我们解决第二个问题。

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


问题答案:

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



 类似资料:
  • 我一直认为Mockito工作某种代理之类的东西。但现在我发现,Mockito允许我做一些像 这不适用于代理。它是如何做到这一点的?这种技术可以用来调用内部AOP方法吗?(请参见Spring AOP不适用于另一个方法中的方法调用)

  • 问题内容: 我正在用Java编写SAX解析器,以解析Wikipedia文章的2.5GB XML文件。有没有办法监视Java中的解析进度? 问题答案: 用一个

  • 问题内容: 我最近想测试一些自定义方法在React组件的方法中有条件地调用。 我使用Jest作为测试框架,其中包括用于模拟/间谍的工具。我已经读过,通过执行以下操作,与Sinon一起测试将是微不足道的: 我试图像这样用Jest重新创建它: 此代码失败,并引发以下错误: 是否可以用Jest测试此功能?如果是这样,怎么办? 问题答案: 关键是使用笑话方法。应该是这样的: 如此处所示:测试功能是否被称为

  • 我想监视spring-data-redis中的池度量。JedisconnectionFactory的游泳池是私人的。我怎么才能拿到?我搜索谷歌,但我找不到很好的方法做到这一点。

  • 如果我有一个函数: 然后我可以测试它(我使用mocha sinon),我在其中监视外部库方法,如下所示: …但如果实现将内部定义的函数传递给我监视的方法,该怎么办? 我如何测试它?

  • 每当使用fork创建一个程序的子进程,就会发生以下情况 - 当前进程现在成为父进程 新的进程成为子进程 如果父进程早于子进程完成其任务,然后退出,会发生什么情况? 现在谁将是子进程的父进程? 子进程的父进程是初始进程,它是启动所有任务的第一个进程。 要监视子进程执行状态,要检查子进程是正在运行还是停止,或检查执行状态等,使用系统调用及其变体。 让我们考虑一个示例程序,其中父进程不等待子进程,这会导