2010-11-19 18 views
0

Ich schreibe eine Funktion Datei herunterzuladen:android Download Fortschritt

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(); 

meine Frage ist, wie kann ich wissen, das gesamte Byte der Datei bin Download i ??

weil ich den Download-Fortschritt anzeigen möchte. könnte mir jemand beibringen

Antwort

1

Meistens, wenn Sie eine Datei von einem Webserver herunterladen (über HTTP, so ist Ihr Fall), haben Sie einen Antwortkopf namens "Content-Länge". Dies sind die Bytes in der Antwort (eine zip/exe/tar.gz oder was nicht).

Sie möchten vielleicht auch etwas über die HTTP HEAD Anfrage Methode lesen. Sie können dies präventiv verwenden, um den Wert des Headers zu finden. Dies ist praktisch, wenn Sie dem Benutzer einen Dialog mit der Größe der Datei präsentieren möchten und ihm die Möglichkeit geben möchten, zu wählen, ob er sie noch herunterladen möchte.

Auschecken the HTTP RFC für viel mehr Informationen über die Header-und HEAD-Methode .;

Mit dem Kommandozeilen-Tool Locken, können Sie einfach diese Header-Informationen für eine Datei erhalten:

:

@>>> 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 

Nun ist diese mit Hilfe der in Java gebaut zu tun HttpURLConnection Sie so etwas wie tun wollen

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(); 
    } 
    } 
} 
Verwandte Themen