Java get download progress
•
Java
I'm writing Java applications (using NetBeans as IDE and JFrame forms), part of which is downloading files How do I update the progress bar with the current download progress, or at least get the total number of bytes currently downloaded in another thread?
The following is part of my code:
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,1024))>=0) { bout.write(data,x); } bout.close(); in.close(); } catch(FileNotFoundException e) { } catch (IOException e) { } } }; new Thread(updatethread). start(); try { updatethread.wait(); } catch (InterruptedException ex) { }
Solution
A working example that uses your code and displays progress in the progress bar might look like this:
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,1024)) >= 0) { downloadedFileSize += x; // calculate progress final int currentProgress = (int) ((((double)downloadedFileSize) / ((double)completeFileSize)) * 100000d); // update progress bar SwingUtilities.@R_403_842@(new Runnable() { @Override public void run() { jProgressBar.setValue(currentProgress); } }); bout.write(data,x); } bout.close(); in.close(); } catch (FileNotFoundException e) { } catch (IOException e) { } } }; new Thread(updatethread). start(); } }
This shows how to do it - you should consider GUI threads, etc. before using it
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码