Friday, August 6, 2010

Download from Internet and Save to SD card in ANDROID

AIM: Download from Internet and Save to SD card .
SOLUTION:
Step 1) Create the Download Method .

public String Download(String Url)
{
String filepath=null;
try {
//set the download URL, a url that points to a file on the internet
//this is the file to be downloaded
URL url = new URL(Url);
//create the new connection
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

//set up some things on the connection
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
//and connect!
urlConnection.connect();
//set the path where we want to save the file
//in this case, going to save it on the root directory of the
//sd card.
File SDCardRoot = Environment.getExternalStorageDirectory();
//create a new file, specifying the path, and the filename
//which we want to save the file as.

String filename= "downloadedFile.png";   // you can download to any type of file ex:.jpeg (image) ,.txt(text file),.mp3 (audio file)
Log.i("Local filename:",""+filename);
file = new File(SDCardRoot,filename);
if(file.createNewFile())
{
file.createNewFile();
}

//this will be used to write the downloaded data into the file we created
FileOutputStream fileOutput = new FileOutputStream(file);

//this will be used in reading the data from the internet
InputStream inputStream = urlConnection.getInputStream();

//this is the total size of the file
int totalSize = urlConnection.getContentLength();
//variable to store total downloaded bytes
int downloadedSize = 0;

//create a buffer...
byte[] buffer = new byte[1024];
int bufferLength = 0; //used to store a temporary size of the buffer

//now, read through the input buffer and write the contents to the file
while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
//add the data in the buffer to the file in the file output stream (the file on the sd card
fileOutput.write(buffer, 0, bufferLength);
//add up the size so we know how much is downloaded
downloadedSize += bufferLength;
//this is where you would do something to report the prgress, like this maybe
Log.i("Progress:","downloadedSize:"+downloadedSize+"totalSize:"+ totalSize) ;

}
//close the output stream when done
fileOutput.close();
if(downloadedSize==totalSize) filepath=file.getPath();

//catch some possible errors...
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
filepath=null;
e.printStackTrace();
}
Log.i("filepath:"," "+filepath) ;

return filepath;

}

Step 2) call this method as
String savedFilePath=Download("Your download link");

Result: savedFilePath will have the output file Path  .It returns NULL if any error occurs.
Note:This code can be used for any type of content but you have to change the file type extension for proper result.

19 comments:

  1. Fantastic. These code will very useful for Android Beginners.

    ReplyDelete
  2. Hi, Please could you help me, i'am trying to add this code snippet to a button when pressed, but i have been struggling for days, i would very much appreciate if you could help me, thank you,

    Lucy X
    clickmob at gmail dot com

    ReplyDelete
  3. This comment has been removed by the author.

    ReplyDelete
  4. Hai... a good article. I used this and download a mp3 file and store it in sdcard. After get the path of the file, I tried to play it. It throws nullpointer exception. But the file is present in the sdcard.

    ReplyDelete
  5. can u able to send the error in logcat.,probably it might be due to path error?

    ReplyDelete
  6. I am getting an exception for this code... Unable to start ComponentInfo...
    NetworkOnMainThread Exception...... How do I resolve that?.....
    My Manifest.xml has these permissions

    ReplyDelete
  7. its not returing the path where the file is stored , please help....

    ReplyDelete
  8. We need to set the download path in the program itself. You can find with variable name "filename" or use file.getAbsolutePath() to retrieve

    ReplyDelete
  9. Throws error:
    java.io.FileNotFoundException:

    but the file is on my server I can see it and the path is correct. Any thoughts.

    ReplyDelete
  10. can we download multiple images from sever if yes then how?

    ReplyDelete
  11. .. Thanks man , that one works great :D

    ReplyDelete
  12. its working but i want to store multiple images to sd card? how can i do that.

    ReplyDelete
  13. Hey, would you mind if I share your blog with my twitter group? There’s a lot of folks that I think would enjoy your content. Please let me know. Thank you.
    Java Training in Chennai | J2EE Training in Chennai | Advanced Java Training in Chennai | Core Java Training in Chennai | Java Training institute in Chennai

    ReplyDelete

Android Developers Blog

Ram's shared items