Android File Writing to External Storage
CHANGE from Internal Storage=
- grab "directory handle" to SD card =Environment.getExtranalStorageDirectory();
- when opening file ---> specify the directory of where the file is on the SD card!!
Step 0: Create unique directory on SD Card to store your file in using Environment.getExternalSgtorageDirectory() ----see below
//Inside your Activity class
File sdCard = Environment.getExternalStorageDirectory();
FIle directory = new File(sdCard.getAbsolutePath() + "/MyFiles" ); //here MyFiles is sub-directory unique to you
directory.mkdirs(); //create the directory.
Step 1: Use java.io.FileOutputStream class to open file, use Activities openFileOutput(file ) method from Activity class, where file = new File(directory, "filename") where directory created in step 1
//Inside your Activity class
//**CODE STEP 0
File file = new File(directory, "textfile.txt"); //creates file in specified directory which is on SD card
FileOutputStream fOut = new FileOutputStream(file);
Step 2: OPTIONAL convert your FileOutputStream instance of step 1 to a easier to use java.io class //NOTE Same as Internal Storage
OutputStreamWriter osw = new OutputSteramWriter (fOut);
Step 3: Write , Flush and Close when done //NOTE Same as Internal Storage
osw.write("string");
osw.flush();
osw.close();
Android File Reading from External Storage
Step 0: Build the directory name of where file is located on SD Card using Environment.getExternalSgtorageDirectory() ----see below
//Inside your Activity class
File sdCard = Environment.getExternalStorageDirectory();
File directory = new File(sdCard.getAbsolutePath() + "/MyFiles" ); //here MyFiles is sub-directory unique to you
Step 1: Use java.io.FileInputStream class to open file using openFileInput(*) method from Activity class
//inside Activity class
//****code from Step 0 ****
File file = new File(directory, "textfile.txt");
FileInputStream fIn = openFileInput(file);
Other Modes: MODE_APPEND, MODE_WORLD_WRITEABLE
Step 2: OPTIONAL convert your FileOutputStream instance of step 1 to a easier to use java.io class //NOTE Same as Internal Storage
InputStreamReader isw = new InputStreamReader (fIn);
Step 3: Read and Close when done //NOTE Same as Internal Storage
int charRead = isw.read();
iws.close();
EXAMPLE: writing and reading to file in External Storage
main.xml App's Activity layout
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"android:layout_height="fill_parent" android:orientation="vertical" >
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Please enter some text" />
<EditText android:id="@+id/txtText1" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/btnSave" android:text="Save" android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="onClickSave" />
<Button android:id="@+id/btnLoad" android:text="Load" android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="onClickLoad" /> </LinearLayout>
App's Activity
public class FilesActivity extends Activity {
EditText textBox;
static final int READ_BLOCK_SIZE = 100;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textBox = (EditText) findViewById(R.id.txtText1);
}
public void onClickSave(View view) {
String str = textBox.getText().toString();
try {
//---SD Card Storage--- STEP 1: Open up OutputStream to File in /MyFiles/textfile.txt
File sdCard = Environment.getExternalStorageDirectory();
File directory = new File (sdCard.getAbsolutePath() + "/MyFiles");
directory.mkdirs();
File file = new File(directory, "textfile.txt");
FileOutputStream fOut = new FileOutputStream(file);
//STEP 2: Create OutputStreamWriter from FileOutputStream
OutputStreamWriter osw = new OutputStreamWriter(fOut);
//---write the string to the file--- STEP 3 write, flush, close
osw.write(str);
osw.flush();
osw.close();
//---display file saved message---
Toast.makeText(getBaseContext(), "File saved successfully!",Toast.LENGTH_SHORT).show();
//---clears the EditText---
textBox.setText("");
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
public void onClickLoad(View view) {
try {
//---SD Storage--- //STEP 1 Opening to Read from /MyFiles/textfile.txt
File sdCard = Environment.getExternalStorageDirectory();
File directory = new File (sdCard.getAbsolutePath() + "/MyFiles");
File file = new File(directory, "textfile.txt");
FileInputStream fIn = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fIn);
char[] inputBuffer = new char[READ_BLOCK_SIZE];
String s = "";
int charRead;
while ((charRead = isr.read(inputBuffer))>0) //STEP 3: read from file until eof, -1 returned
{
//---convert the chars to a String---
String readString = String.copyValueOf(inputBuffer, 0,charRead);
s += readString;
inputBuffer = new char[READ_BLOCK_SIZE];
}
//---set the EditText to the text that has been
// read---
textBox.setText(s);
Toast.makeText(getBaseContext(), "File loaded successfully!", Toast.LENGTH_SHORT).show();
}
catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
android:layout_height="fill_parent"
android:orientation="vertical" >