gpt4 book ai didi

Java获取下载进度

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:44:35 26 4
gpt4 key购买 nike

我正在编写一个 Java 应用程序(使用 NetBeans 作为 IDE 和 jFrame 形式),其中一部分下载文件。如何使用当前下载进度更新进度条,或者至少获取另一个线程中当前下载的字节总数?

下面是我的部分代码:

Runnable updatethread = new Runnable() {
public void run() {
try {
java.io.BufferedInputStream in = new java.io.BufferedInputStream(new java.net.URL("server/package.zip").openStream());
java.io.FileOutputStream fos = new java.io.FileOutputStream("package.zip");
java.io.BufferedOutputStream bout = new BufferedOutputStream(fos,1024);
byte[] data = new byte[1024];
int x=0;
while((x=in.read(data,0,1024))>=0)
{
bout.write(data,0,x);
}
bout.close();
in.close();
}
catch(FileNotFoundException e) { } catch (IOException e) { }
}
};
new Thread(updatethread).

start();
try {
updatethread.wait();

} catch (InterruptedException ex) { }

最佳答案

一个工作示例,使用您的代码并在进度条中显示进度可能如下所示:

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class Progressbar {

public static void main(String[] args) {

final JProgressBar jProgressBar = new JProgressBar();
jProgressBar.setMaximum(100000);
JFrame frame = new JFrame();
frame.setContentPane(jProgressBar);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(300, 70);
frame.setVisible(true);

Runnable updatethread = new Runnable() {
public void run() {
try {

URL url = new URL("http://downloads.sourceforge.net/project/bitcoin/Bitcoin/blockchain/bitcoin_blockchain_170000.zip");
HttpURLConnection httpConnection = (HttpURLConnection) (url.openConnection());
long completeFileSize = httpConnection.getContentLength();

java.io.BufferedInputStream in = new java.io.BufferedInputStream(httpConnection.getInputStream());
java.io.FileOutputStream fos = new java.io.FileOutputStream(
"package.zip");
java.io.BufferedOutputStream bout = new BufferedOutputStream(
fos, 1024);
byte[] data = new byte[1024];
long downloadedFileSize = 0;
int x = 0;
while ((x = in.read(data, 0, 1024)) >= 0) {
downloadedFileSize += x;

// calculate progress
final int currentProgress = (int) ((((double)downloadedFileSize) / ((double)completeFileSize)) * 100000d);

// update progress bar
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
jProgressBar.setValue(currentProgress);
}
});

bout.write(data, 0, x);
}
bout.close();
in.close();
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
}
};
new Thread(updatethread).

start();
}

}

这展示了如何去做——在使用它之前你应该考虑 GUI-Threads 等。

关于Java获取下载进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22273045/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com