2013-04-20 6 views
23

Ich habe eine Anforderung in meiner Android-Anwendung. Ich muss Datei in spezifischem Ordner von sdcard Programmatisch herunterladen und speichern. Ich habe Quellcode entwickelt ..Android: Wie wird die Datei vom Server herunterzuladen und in bestimmten Ordnern in sdcard speichert

und mein Code

String DownloadUrl = "http://myexample.com/android/"; 
    String fileName = "myclock_db.db"; 

    DownloadDatabase(DownloadUrl,fileName); 

    // and the method is 

public void DownloadDatabase(String DownloadUrl, String fileName) { 
    try { 
     File root = android.os.Environment.getExternalStorageDirectory(); 
     File dir = new File(root.getAbsolutePath() + "/myclock/databases"); 
     if(dir.exists() == false){ 
      dir.mkdirs(); 
     } 

     URL url = new URL("http://myexample.com/android/"); 
     File file = new File(dir,fileName); 

     long startTime = System.currentTimeMillis(); 
     Log.d("DownloadManager" , "download url:" +url); 
     Log.d("DownloadManager" , "download file name:" + fileName); 

     URLConnection uconn = url.openConnection(); 
     uconn.setReadTimeout(TIMEOUT_CONNECTION); 
     uconn.setConnectTimeout(TIMEOUT_SOCKET); 

     InputStream is = uconn.getInputStream(); 
     BufferedInputStream bufferinstream = new BufferedInputStream(is); 

     ByteArrayBuffer baf = new ByteArrayBuffer(5000); 
     int current = 0; 
     while((current = bufferinstream.read()) != -1){ 
      baf.append((byte) current); 
     } 

     FileOutputStream fos = new FileOutputStream(file); 
     fos.write(baf.toByteArray()); 
     fos.flush(); 
     fos.close(); 
     Log.d("DownloadManager" , "download ready in" + ((System.currentTimeMillis() - startTime)/1000) + "sec"); 
     int dotindex = fileName.lastIndexOf('.'); 
     if(dotindex>=0){ 
      fileName = fileName.substring(0,dotindex); 

    } 
    catch(IOException e) { 
     Log.d("DownloadManager" , "Error:" + e); 
    } 

} 

Jetzt Das Problem nur leere Datei mit dem Dateinamen myclock_db.db ist auf dem Weg ist, zu speichern. aber ich muss Inhalt der Datei in den spezifischen Ordner herunterladen und speichern. Ich habe versucht, die Datei herunterzuladen, aber ich kann es nicht. Kann mir jemand helfen, das Problem zu lösen ...

Vielen Dank im Voraus ...

+0

Wie kann ich in diesem Beispiel überprüfen, ob Datei herunterladen –

+0

100% abgeschlossen, da Ihre db-Datei einer großen Größe sein kann, habe ich die Datei in Blöcken statt Anhängen all den Strom im Speicher und das Schreiben die gesamte Datei zu schreiben bei dringend empfohlen Einmal. – MikeL

Antwort

13

Ihre Download-URL zu einer Datei keine Verbindung ist. Es ist ein Verzeichnis. Stellen Sie sicher, dass es eine Datei ist und existiert. Überprüfen Sie auch Ihr Logcat-Fenster auf Fehlerprotokolle. Ein weiterer Vorschlag, es ist immer besser, eine printStackTrace() in Fangblöcke statt Logs zu machen. Es gibt eine detailliertere Ansicht des Fehlers.

Ändern Sie diese Zeile:

URL url = new URL("http://myexample.com/android/"); 

zu:

URL url = new URL("http://myexample.com/android/yourfilename.txt"); //some file url 

Als nächstes wird im catch-Block, fügen Sie diese Zeile:

e.printStackTrace(); 

auch im Verzeichnispfad, sollte es sein etwas wie dieses:

File dir = new File(root.getAbsolutePath() + "/mnt/sdcard/myclock/databases"); 

statt

File dir = new File(root.getAbsolutePath() + "/myclock/databases"); 

Als nächstes stellen Sie sicher, dass Sie die Berechtigung erworben haben in Android Manifest auf externe Speicher zu schreiben.

+0

Okay, Wie kann ich meinen Code bearbeiten .. können Sie mir bitte führen .. @ shiladitya –

+0

überprüfen Sie die bearbeitete Antwort – shiladitya

+0

Eigentlich ist die Datei, was ich das Herunterladen einer Datenbank-Datei, die eine Datei ist, aber keine Erweiterung .db. Um es vom Server herunterzuladen, habe ich eine Erweiterung hinzugefügt und heruntergeladen. Jetzt greift die Datei, die wir heruntergeladen haben, nicht zu, da sie eine Erweiterung hat. wir müssen die Erweiterung nach dem Download entfernen oder eine andere Möglichkeit besteht darin, den MIME-Typ für die Datei in webconfig zu deklarieren, was nicht funktioniert. Können Sie mir helfen, die Erweiterung nach dem Download zu entfernen? Ich habe meinen Code für diesen Artikel aktualisiert. Können Sie das einmal überprüfen? –