Nitin Agarwal
Nitin Agarwal

Reputation: 573

Unable to write to external SD Card in Android

I am trying to write files in the external SD card folder. Even after having set the required permission in the manifest file, I am unable to write on the external SD card.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Code:

String path = "/mnt/extsd/nit.txt";

    File myFile = new File(path);

    if (!myFile.exists()) {
       try {
           myFile.createNewFile();
       } catch(Exception e)
       {
           txtText.setText("Failed-" + e.getMessage());
           e.printStackTrace();
       }
    }

try {
            FileOutputStream fostream = new FileOutputStream(myFile);
            OutputStreamWriter oswriter = new OutputStreamWriter(fostream);
            BufferedWriter bwriter = new BufferedWriter(oswriter);
            bwriter.write("Hi welcome ");
            bwriter.newLine();
            bwriter.close();
            oswriter.close();
            fostream.close();
            txtText.setText("success");
        } catch(Exception e)
        {
            txtText.setText("Failed-" + e.getMessage());
            e.printStackTrace();
        }

On the other hand when I use ES File Explorer and try to create a file, it creates it without any issues.

Upvotes: 1

Views: 1349

Answers (3)

Krunal Indrodiya
Krunal Indrodiya

Reputation: 792

First check sd-card is available or not.

String state = Environment.getExternalStorageState();
String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
if (Environment.MEDIA_MOUNTED.equals(state))
{
File folder = folder = new File(extStorageDirectory, "FolderName");
if(!folder.exists())
{
    folder.mkdir();//making folder
}
File file = new File(folder,"Filename");//making file
}

Please try this code, it work in my application.

Upvotes: 0

Suhail Mehta
Suhail Mehta

Reputation: 5542

You should be able to call Environment.getExternalStorageDirectory() to get the root path to the SD card and use that to create a FileOutputStream. From there, just use the standard java.io routines.

File log = new File(Environment.getExternalStorageDirectory(), "your_file_name.txt");
    try {
        out = new BufferedWriter(new FileWriter(log.getAbsolutePath(), false));
        out.write("any data");

    } catch (Exception e) {

    }

And don't forget to close the streams.

Upvotes: 0

Paresh Mayani
Paresh Mayani

Reputation: 128428

Don't use the absolute path String path = "/mnt/extsd/nit.txt"; because you never know about android device being used by users. Rather you can get the external storage directory path by using Environment.getExternalStorageDirectory().toString().

Upvotes: 1

Related Questions