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

在Java中,如何为FileChannel设置进度条?,java,url,httpurlconnection,Java,Url,Httpurlconnection,比如说, Channels.newChannel(url.openStream()) 这一行打开流并从中获取数据,但我无法找到它的进度 有没有办法做到这一点 这一行打开流并从中获取数据 不,除非您从中读取(),否则它不会。因此 有没有办法做到这一点 有。您可以.read(buf)其中buf是一个ByteBuffer 只要抓住缓冲区的.position() (请注意,Channels.newChannel(InputStream)将不会返回FileChannel,而是返回ReadableByteC

比如说,

Channels.newChannel(url.openStream())

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

有没有办法做到这一点

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

不,除非您从中读取(),否则它不会。因此

有没有办法做到这一点

有。您可以
.read(buf)
其中
buf
是一个
ByteBuffer

只要抓住缓冲区的
.position()


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

使用
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);
}
int pos=0;
对于(int x=0;x<100/*零件数量*/;x++){
来源。转移到(0*x,1024/*零件尺寸*/,目的地);
进度.设定值(x/100/*零件数量*/*100);
}