Content-Lengthhttp响应的标头中获取此值。
如果只需要下载后的最终字节数,则最简单的方法就是检查刚刚写入的文件大小。
但是,如果要显示当前已下载多少字节的进度,则可能需要扩展apache
CountingOutputStream来包装,
FileOutputStream以便每次
write调用方法时,它都会计算通过的字节数并更新进度条。
更新资料
这是的简单实现
DownloadCountingOutputStream。我不确定您是否熟悉使用
ActionListener它,但是它对于实现GUI是有用的。
public class DownloadCountingOutputStream extends CountingOutputStream { private ActionListener listener = null; public DownloadCountingOutputStream(OutputStream out) { super(out); } public void setListener(ActionListener listener) { this.listener = listener; } @Override protected void afterWrite(int n) throws IOException { super.afterWrite(n); if (listener != null) { listener.actionPerformed(new ActionEvent(this, 0, null)); } }}
这是用法示例:
public class Downloader { private static class ProgressListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // e.getSource() gives you the object of DownloadCountingOutputStream // because you set it in the overriden method, afterWrite(). System.out.println("Downloaded bytes : " + ((DownloadCountingOutputStream) e.getSource()).getByteCount()); } } public static void main(String[] args) { URL dl = null; File fl = null; String x = null; OutputStream os = null; InputStream is = null; ProgressListener progressListener = new ProgressListener(); try { fl = new File(System.getProperty("user.home").replace("\", "/") + "/Desktop/Screenshots.zip"); dl = new URL("http://ds-forums.com/kyle-tests/uploads/Screenshots.zip"); os = new FileOutputStream(fl); is = dl.openStream(); DownloadCountingOutputStream dcount = new DownloadCountingOutputStream(os); dcount.setListener(progressListener); // this line give you the total length of source stream as a String. // you may want to convert to integer and store this value to // calculate percentage of the progression. dl.openConnection().getHeaderField("Content-Length"); // begin transfer by writing to dcount, not os. IOUtils.copy(is, dcount); } catch (Exception e) { System.out.println(e); } finally { IOUtils.closeQuietly(os); IOUtils.closeQuietly(is); } }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)