Java取得下载进度

我正在编写一个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取得下载进度 的全部内容, 来源链接: utcz.com/qa/406633.html

回到顶部