首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android下载进度

android下载进度
EN

Stack Overflow用户
提问于 2010-11-19 15:08:07
回答 1查看 422关注 0票数 0

我正在写一个下载文件的函数:

代码语言:javascript
复制
URL _url = new URL("http://kevin95800.free.fr/Music/Jay%20Sean%20-%20Down%20(ft.%20Lil%20Wayne).mp3");
        URLConnection conn = _url.openConnection();
        conn.connect();

        InputStream is = conn.getInputStream();

        if(is == null)
        {
            throw new RuntimeException("stream is null");
        }

        File musicFile = new File("/sdcard/music/" , "mitpig.mp3");

        FileOutputStream fos = new FileOutputStream(musicFile);

        byte buf[] = new byte[128];

        do
        {
            int numread = is.read(buf);
            Log.i("html2" , numread+" ");
            if(numread <=0)
                break;

            fos.write(buf , 0 , numread);

        }while(true);

        is.close();

我的问题是,我如何知道我正在下载的文件的总字节?

因为,我想要显示下载进度。有人能教我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-19 15:45:49

大多数情况下,从web服务器(通过HTTP )下载文件时,您会得到一个名为"Content-length“的响应头。这将是响应中的字节( zip/exe/tar.gz等)。

您可能还需要阅读有关HTTP HEAD请求方法的信息。您可以抢先使用它来查找标头的值。如果你想向用户显示一个文件大小的对话框,并让他们选择是否仍然想要下载,这是很方便的。

有关header和HEAD方法的更多信息,请查看the HTTP RFC

使用命令行工具Curl,您可以轻松获得文件的头信息:

代码语言:javascript
复制
@>>> curl -I http://www.reverse.net/pub/apache//mahout/0.4/mahout-distribution-0.4-src.zip
HTTP/1.1 200 OK
Date: Fri, 19 Nov 2010 07:20:20 GMT
Server: Apache
Last-Modified: Thu, 28 Oct 2010 14:58:36 GMT
ETag: "f550b5-4dc0af-938e1f00"
Accept-Ranges: bytes
Content-Length: 5095599
Content-Type: application/zip

现在,要使用内置的Java HttpUrlConnection完成此操作,您需要执行以下操作:

代码语言:javascript
复制
import java.net.HttpURLConnection;
import java.net.URL;

public class Example {
  public static void main(String[] args)
  {
    try {
    HttpURLConnection con = 
      (HttpURLConnection) new URL("http://www.reverse.net/pub/apache"+
          "//mahout/0.4/mahout-distribution-0.4-src.zip").openConnection();
      con.setRequestMethod("HEAD");
      con.connect();
      int numbytes = Integer.parseInt(con.getHeaderField("Content-length"));
      System.out.println(String.format(
          "%s bytes found, %s Mb", numbytes, numbytes/(1024f*1024)));
    } 
    catch (Exception e) {
      e.printStackTrace();
    }
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4222870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档