Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to download a file from a server and save it in specific folder in SD card in Android?

Tags:

I have one requirement in my Android application. I need to download and save file in specific folder of SD card programmatically. I have developed source code, which is

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

Now the issue is only empty file with filename myclock_db.db is saving in the path. but I need to download and save content of file in the specific folder. Tried several ways to get the file download, but I can't.

like image 400
kumar Sudheer Avatar asked Apr 20 '13 05:04

kumar Sudheer


People also ask

How do I download a specific folder on Android?

Tap the three-dot icon beside the file or folder you want to download, then scroll down and tap Download. It may ask you where you want to save the file on your phone.


1 Answers

Your download URL is not a link to any file. It's a directory. Make sure its a file and exists. Also check your logcat window for error logs. One more suggestion, its always better to do a printStackTrace() in catch blocks instead of Logs. Its gives a more detailed view of the error.

Change this line:

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

to:

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

Next, in catch block, add this line:

e.printStackTrace(); 

Also in the directory path, it should be something like this:

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

instead of

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

Next, make sure you have acquired permission for writing to external storage in Android manifest.

like image 145
shiladitya Avatar answered Sep 30 '22 05:09

shiladitya