138

How to create a file, write data into it and read data from it on Android? If possible provide a code snippet.

2

4 Answers 4

60

I used the following code to create a temporary file for writing bytes. And its working fine.

File file = new File(Environment.getExternalStorageDirectory() + "/" + File.separator + "test.txt"); file.createNewFile(); byte[] data1={1,1,0,0}; //write the bytes in file if(file.exists()) { OutputStream fo = new FileOutputStream(file); fo.write(data1); fo.close(); System.out.println("file created: "+file); } //deleting the file file.delete(); System.out.println("file deleted"); 
Sign up to request clarification or add additional context in comments.

Comments

59

From here: http://www.anddev.org/working_with_files-t115.html

//Writing a file... try { // catches IOException below final String TESTSTRING = new String("Hello Android"); /* We have to use the openFileOutput()-method * the ActivityContext provides, to * protect your file from others and * This is done for security-reasons. * We chose MODE_WORLD_READABLE, because * we have nothing to hide in our file */ FileOutputStream fOut = openFileOutput("samplefile.txt", MODE_PRIVATE); OutputStreamWriter osw = new OutputStreamWriter(fOut); // Write the string to the file osw.write(TESTSTRING); /* ensure that everything is * really written out and close */ osw.flush(); osw.close(); //Reading the file back... /* We have to use the openFileInput()-method * the ActivityContext provides. * Again for security reasons with * openFileInput(...) */ FileInputStream fIn = openFileInput("samplefile.txt"); InputStreamReader isr = new InputStreamReader(fIn); /* Prepare a char-Array that will * hold the chars we read back in. */ char[] inputBuffer = new char[TESTSTRING.length()]; // Fill the Buffer with data from the file isr.read(inputBuffer); // Transform the chars to a String String readString = new String(inputBuffer); // Check if we read back the same chars that we had written out boolean isTheSame = TESTSTRING.equals(readString); Log.i("File Reading stuff", "success = " + isTheSame); } catch (IOException ioe) {ioe.printStackTrace();} 

6 Comments

where does the file will be written?
"/data/data/your_project_package_structure/files/samplefile.txt"
Do you need to call flush before close ?
No, the flush is redundant. According to the docs, calling close will perform a flush first. docs.oracle.com/javase/6/docs/api/java/io/…
MODE_WORLD_READABL deprecated this is what I got when I tried to use it
|
9

I decided to write a class from this thread that may be helpful to others. Note that this is currently intended to write in the "files" directory only (e.g. does not write to "sdcard" paths).

import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import android.content.Context; public class AndroidFileFunctions { public static String getFileValue(String fileName, Context context) { try { StringBuffer outStringBuf = new StringBuffer(); String inputLine = ""; /* * We have to use the openFileInput()-method the ActivityContext * provides. Again for security reasons with openFileInput(...) */ FileInputStream fIn = context.openFileInput(fileName); InputStreamReader isr = new InputStreamReader(fIn); BufferedReader inBuff = new BufferedReader(isr); while ((inputLine = inBuff.readLine()) != null) { outStringBuf.append(inputLine); outStringBuf.append("\n"); } inBuff.close(); return outStringBuf.toString(); } catch (IOException e) { return null; } } public static boolean appendFileValue(String fileName, String value, Context context) { return writeToFile(fileName, value, context, Context.MODE_APPEND); } public static boolean setFileValue(String fileName, String value, Context context) { return writeToFile(fileName, value, context, Context.MODE_WORLD_READABLE); } public static boolean writeToFile(String fileName, String value, Context context, int writeOrAppendMode) { // just make sure it's one of the modes we support if (writeOrAppendMode != Context.MODE_WORLD_READABLE && writeOrAppendMode != Context.MODE_WORLD_WRITEABLE && writeOrAppendMode != Context.MODE_APPEND) { return false; } try { /* * We have to use the openFileOutput()-method the ActivityContext * provides, to protect your file from others and This is done for * security-reasons. We chose MODE_WORLD_READABLE, because we have * nothing to hide in our file */ FileOutputStream fOut = context.openFileOutput(fileName, writeOrAppendMode); OutputStreamWriter osw = new OutputStreamWriter(fOut); // Write the string to the file osw.write(value); // save and close osw.flush(); osw.close(); } catch (IOException e) { return false; } return true; } public static void deleteFile(String fileName, Context context) { context.deleteFile(fileName); } } 

2 Comments

I have check your code but there are some commands that are deprecated for the new API (17): Context.MODE_WORLD_READABLE and Context.MODE_WORLD_WRITEABLE needs to be changed.
Apart from the deprecated bits - you must close in finally and you need not flush before close. Please do not post sloppy code
3

Write to a file test.txt:

String filepath ="/mnt/sdcard/test.txt"; FileOutputStream fos = null; try { fos = new FileOutputStream(filepath); byte[] buffer = "This will be writtent in test.txt".getBytes(); fos.write(buffer, 0, buffer.length); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ if(fos != null) fos.close(); } 

Read from file test.txt:

String filepath ="/mnt/sdcard/test.txt"; FileInputStream fis = null; try { fis = new FileInputStream(filepath); int length = (int) new File(filepath).length(); byte[] buffer = new byte[length]; fis.read(buffer, 0, length); fis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ if(fis != null) fis.close(); } 

Note: don't forget to add these two permission in AndroidManifest.xml

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

1 Comment

I thought he is asking about creating a file not written in a file !

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.