在Java中,如何为FileChannel设置进度条?

时间:2013-07-11 10:05:05

标签: java url httpurlconnection

例如,

Channels.newChannel(url.openStream());

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

有办法吗?

2 个答案:

答案 0 :(得分:1)

  

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

不,直到你.read()才会这样做。因此...

  

有办法吗?

是的。 .read(buf) bufByteBuffer的{​​{1}}。

抓住缓冲区的.position()

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

答案 1 :(得分:1)

使用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);
}