如何在Android中创build文件?
如何创build一个文件,写入数据,并从Android上读取数据? 如果可能的话,提供一个代码片段。
从这里: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_WORLD_READABLE); 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();}
我用下面的代码来创build一个写入字节的临时文件。 它的工作正常。
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); url = upload.upload(file); } //deleting the file file.delete(); System.out.println("file deleted");
我决定从这个线程写一个可能对别人有帮助的课程。 请注意,这目前只打算写在“文件”目录(例如不写入“SD卡”path)。
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); } }
写入一个文件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(); }
从文件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(); }
注意:不要忘记在AndroidManifest.xml中添加这两个权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />