How do you write to a folder on an SD card in Android?
File sdCard = Environment.getExternalStorageDirectory();File dir = new File (sdCard.getAbsolutePath() + "/dir1/dir2");dir.mkdirs();File file = new File(dir, "filename");FileOutputStream f = new FileOutputStream(file);...
Add Permission to Android Manifest
Add this WRITE_EXTERNAL_STORAGE permission to your applications manifest.
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="your.company.package" android:versionCode="1" android:versionName="0.1"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <!-- ... --> </application> <uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /></manifest>
Check availability of external storage
You should always check for availability first. A snippet from the official android documentation on external storage.
boolean mExternalStorageAvailable = false;boolean mExternalStorageWriteable = false;String state = Environment.getExternalStorageState();if (Environment.MEDIA_MOUNTED.equals(state)) { // We can read and write the media mExternalStorageAvailable = mExternalStorageWriteable = true;} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { // We can only read the media mExternalStorageAvailable = true; mExternalStorageWriteable = false;} else { // Something else is wrong. It may be one of many other states, but all we need // to know is we can neither read nor write mExternalStorageAvailable = mExternalStorageWriteable = false;}
Use a Filewriter
At last but not least forget about the FileOutputStream
and use a FileWriter
instead. More information on that class form the FileWriter javadoc. You'll might want to add some more error handling here to inform the user.
// get external storage file referenceFileWriter writer = new FileWriter(getExternalStorageDirectory()); // Writes the content to the filewriter.write("This\n is\n an\n example\n"); writer.flush();writer.close();
Found the answer here - http://mytechead.wordpress.com/2014/01/30/android-create-a-file-and-write-to-external-storage/
It says,
/*** Method to check if user has permissions to write on external storage or not*/public static boolean canWriteOnExternalStorage() { // get the state of your external storage String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { // if storage is mounted return true Log.v("sTag", "Yes, can write to external storage."); return true; } return false;}
and then let’s use this code to actually write to the external storage:
// get the path to sdcardFile sdcard = Environment.getExternalStorageDirectory();// to this path add a new directory pathFile dir = new File(sdcard.getAbsolutePath() + "/your-dir-name/");// create this directory if not already createddir.mkdir();// create the file in which we will write the contentsFile file = new File(dir, "My-File-Name.txt");FileOutputStream os = outStream = new FileOutputStream(file);String data = "This is the content of my file";os.write(data.getBytes());os.close();
And this is it. If now you visit your /sdcard/your-dir-name/ folder you will see a file named - My-File-Name.txt with the content as specified in the code.
PS:- You need the following permission -
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />