Comment télécharger un fichier à partir d'un serveur et l'enregistrer dans un dossier spécifique dans la carte SD dans Android?

J'ai une exigence dans mon application Android. J'ai besoin de télécharger et d'enregistrer le fichier dans un dossier spécifique de la carte SD par programme. J'ai développé le code source, qui est

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

}

Maintenant, le problème est seulement un fichier vide avec le nom de fichier myclock_db.db enregistre dans le chemin. mais j'ai besoin de télécharger et d'enregistrer le contenu du fichier dans le dossier spécifique. J'ai essayé plusieurs façons d'obtenir le téléchargement du fichier, mais je ne peux pas.

24
demandé sur halfer 2013-04-20 09:39:59

1 réponses

Votre URL de téléchargement n'est pas un lien vers un fichier. C'est un répertoire. Assurez-vous que c'est un fichier et existe. Vérifiez également votre fenêtre logcat pour les journaux d'erreurs. Une suggestion de plus, il est toujours préférable de faire un printStackTrace() dans des blocs de capture au lieu de journaux. Sa donne une vue plus détaillée de l'erreur.

Modifier cette ligne:

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

À:

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

Ensuite, dans le bloc catch, ajoutez cette ligne:

e.printStackTrace();

Aussi dans le chemin du répertoire, il devrait être quelque chose comme ce:

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

Au Lieu de

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

Ensuite, assurez-vous que vous avez acquis l'autorisation d'écrire sur le stockage externe dans le manifeste Android.

15
répondu shiladitya 2013-04-20 05:56:09