Android最基本的数据存储方式,所有数据原封不动地保存至文件中,适合存储简单的文本数据或是二进制数据。
所有文件默认存储至/data/data/<包名>/files/目录下。
openFileOutput()第一个参数是文件名,文件创建的时候就使用该名称,不可包含路径(因为默认存储至上述路径下);第二个参数是文件操作模式,有 MODE_PRIVATE和 MODE_APPEND模式(另有MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE模式允许外部程序修改本程序的文件,不安全,已废弃)。
MODE_PRIVATE:默认模式,当表示指定同样文件名时,所写入的内容将覆盖原有内容。
MODE_APPEND:如果文件已存在就直接追加内容,否则创建新文件。
可以在DDMS的File Explorer视图中,进入/data/data/<包名>/files/目录中查看。
// 向文件写数据,以Srting数据类型为例
public static void writeDataIntoFile(String dataToBeSaved) {
FileOutputStream fos = null;
BufferedWriter writer = null;
try {
fos = openFileOutput("data", Context.MODE_APPEND);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
writer = new BufferedWriter(new OutputStreamWriter(fos));
try {
writer.write(dataToBeSaved);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
// 从文件读数据,以字符串形式返回
public static String readDataFromFile() {
FileInputStream fis = null;
BufferedReader reader = null;
try {
fis = openFileInput("data");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
reader = new BufferedReader(new InputStreamReader(fis));
StringBuilder stringBuilder = new StringBuilder();
String line = "";
try {
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return stringBuilder.toString();
}