【问题标题】:In Java, how do I set a progress bar for FileChannel?在 Java 中,如何为 FileChannel 设置进度条?
【发布时间】:2013-07-11 10:05:05
【问题描述】:

例如,

Channels.newChannel(url.openStream());

这一行打开流并从中获取数据,但我无法找到它的进度。

有办法吗?

【问题讨论】:

    标签: java url httpurlconnection


    【解决方案1】:

    这一行打开流并从中获取数据

    不,直到你 .read() 从它那里。所以……

    有办法吗?

    是的,有。你.read(buf) 其中bufByteBuffer

    只需抓住该缓冲区的.position()

    (注意Channels.newChannel(InputStream) 不会返回FileChannel,而是ReadableByteChannel

    【讨论】:

      【解决方案2】:

      当使用transferFrom()transferTo() 方法时,您必须传递文件内的起点,以及要传输的字节数。

      您可以做的是将文件分成 100 个“部分”。这很简单:

      File f = new File(url);
      int size = f.length();
      

      假设我们的文件大小为 100KB,那么现在大小为 102400。 只需将其除以“部分”的数量(本例中为 100),每个“部分”就有 1024 个字节。现在我们要做的就是显示我们已经转移的“零件”的百分比。

      举个例子

      int pos = 0;
      for(int x = 0 ; x < 100 /*amount of parts*/ ; x++) {
          source.transferTo(0*x, 1024 /*part size*/, destination);
          progress.setValue(x/100 /*amount of parts*/ *100);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-03
        • 2015-03-23
        • 2016-02-24
        • 1970-01-01
        相关资源
        最近更新 更多