我正在编写下载文件的功能:
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();
我的问题是,我如何知道我正在下载的文件的总字节数?
因为,我想显示下载进度。有人可以教我吗
答案 0 :(得分:1)
大多数情况下,当从Web服务器下载文件时(通过HTTP,您的情况就是如此),您将拥有一个名为“Content-length”的响应头。这将是响应中的字节(zip / exe / tar.gz或者不是)。
您可能还想阅读有关HTTP HEAD请求方法的信息。您可以预先使用此方法来查找标头的值。如果你想向用户提供一个文件大小的对话框,并给他们选择是否仍然想要下载的话,这很方便。
查看the HTTP RFC以获取有关标题和HEAD方法的更多信息。
使用命令行工具Curl,您可以轻松获取文件的此标头信息:
@>>> 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执行此操作,您需要执行以下操作:
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();
}
}
}