Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Write a file in external storage in Android

I want to create a file in external storage sdCard and write to it.I have searched through internet and try but not getting the result,I have added permission in Android Manifest file as well,I am doing this on Emulator,I am trying the following code and getting a ERRR", "Could not create file".

btnWriteSDFile = (Button) findViewById(R.id.btnWriteSDFile); btnWriteSDFile.setOnClickListener(new OnClickListener() {     //private Throwable e;      @Override     public void onClick(View v) {         // write on SD card file data from the text box         try {             File myFile = new File("/sdcard/mysdfile.txt");             myFile.createNewFile();             FileOutputStream fOut = new FileOutputStream(myFile);             OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);             myOutWriter.append(txtData.getText());             myOutWriter.close();             fOut.close();          } catch (Exception e) {               Log.e("ERRR", "Could not create file",e);         }      }// onClick }); // btnWriteSDFile 
like image 442
sheraz amin Avatar asked Nov 30 '11 17:11

sheraz amin


People also ask

How can I write to external storage in Android?

To read and write data to external storage, the app required WRITE_EXTERNAL_STORAGE and READ_EXTERNAL_STORAGE system permission. These permissions are added to the AndroidManifest. xml file. Add these permissions just after the package name.

What is write external storage permission Android?

Android 11 introduces the MANAGE_EXTERNAL_STORAGE permission, which provides write access to files outside the app-specific directory and MediaStore . To learn more about this permission, and why most apps don't need to declare it to fulfill their use cases, see the guide on how to manage all files on a storage device.

What is external storage in Android?

This can be a removable storage media (such as an SD card) or an internal (non-removable) storage. That means, both storage types like Nexus 6P's 64 GB internal memory and removable microSD card which we insert in phone's card slot are considered as External Storage.


1 Answers

You can do this with this code also.

 public class WriteSDCard extends Activity {   private static final String TAG = "MEDIA";  private TextView tv;    /** Called when the activity is first created. */ @Override  public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main);          tv = (TextView) findViewById(R.id.TextView01);     checkExternalMedia();     writeToSDFile();     readRaw();  }  /** Method to check whether external media available and writable. This is adapted from    http://developer.android.com/guide/topics/data/data-storage.html#filesExternal */   private void checkExternalMedia(){       boolean mExternalStorageAvailable = false;     boolean mExternalStorageWriteable = false;     String state = Environment.getExternalStorageState();      if (Environment.MEDIA_MOUNTED.equals(state)) {         // Can read and write the media         mExternalStorageAvailable = mExternalStorageWriteable = true;     } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {         // Can only read the media         mExternalStorageAvailable = true;         mExternalStorageWriteable = false;     } else {         // Can't read or write         mExternalStorageAvailable = mExternalStorageWriteable = false;     }        tv.append("\n\nExternal Media: readable="             +mExternalStorageAvailable+" writable="+mExternalStorageWriteable); }  /** Method to write ascii text characters to file on SD card. Note that you must add a     WRITE_EXTERNAL_STORAGE permission to the manifest file or this method will throw    a FileNotFound Exception because you won't have write permission. */  private void writeToSDFile(){      // Find the root of the external storage.     // See http://developer.android.com/guide/topics/data/data-  storage.html#filesExternal      File root = android.os.Environment.getExternalStorageDirectory();      tv.append("\nExternal file system root: "+root);      // See http://stackoverflow.com/questions/3551821/android-write-to-sd-card-folder      File dir = new File (root.getAbsolutePath() + "/download");     dir.mkdirs();     File file = new File(dir, "myData.txt");      try {         FileOutputStream f = new FileOutputStream(file);         PrintWriter pw = new PrintWriter(f);         pw.println("Hi , How are you");         pw.println("Hello");         pw.flush();         pw.close();         f.close();     } catch (FileNotFoundException e) {         e.printStackTrace();         Log.i(TAG, "******* File not found. Did you" +                 " add a WRITE_EXTERNAL_STORAGE permission to the   manifest?");     } catch (IOException e) {         e.printStackTrace();     }        tv.append("\n\nFile written to "+file); }  /** Method to read in a text file placed in the res/raw directory of the application. The   method reads in all lines of the file sequentially. */  private void readRaw(){     tv.append("\nData read from res/raw/textfile.txt:");     InputStream is = this.getResources().openRawResource(R.raw.textfile);     InputStreamReader isr = new InputStreamReader(is);     BufferedReader br = new BufferedReader(isr, 8192);    // 2nd arg is buffer size      // More efficient (less readable) implementation of above is the composite expression     /*BufferedReader br = new BufferedReader(new InputStreamReader(             this.getResources().openRawResource(R.raw.textfile)), 8192);*/      try {         String test;             while (true){                            test = br.readLine();                // readLine() returns null if no more lines in the file             if(test == null) break;             tv.append("\n"+"    "+test);         }         isr.close();         is.close();         br.close();     } catch (IOException e) {         e.printStackTrace();     }     tv.append("\n\nThat is all"); } } 
like image 52
mH16 Avatar answered Sep 20 '22 12:09

mH16