相关方法介绍:
- FileOutputStream openFileOutput (String name, int mode);
创建文件,并返回文件输出流,用于对文件做写入操作
- FileInputStream openFileInput (String name);
返回文件输入流,用于对文件的读操作
- getCacheDir();
用于获取/data/data/<package name>/cache目录
- getFilesDir();
用于获取/data/data/<package name>/files目录
name: 用于指定文件名称,不能包含路径分隔符“/”,如果文件不存在,Android会自动创建它。
创建的文件保存在/data/data/<package name>/files/目录中。
mode:
MODE_APPEND 私有(只有创建此文件的程序能够使用,其他应用程序不能访问),在原有内容基础上增加数据
MODE_PRIVATE 私有,每次打开文件都会覆盖原来的内容
MODE_WORLD_READABLE 可以被其他应用程序读取
MODE_WORLD_WRITEABLE 可以被其他应用程序写入
MODE_APPEND 私有(只有创建此文件的程序能够使用,其他应用程序不能访问),在原有内容基础上增加数据
MODE_PRIVATE 私有,每次打开文件都会覆盖原来的内容
MODE_WORLD_READABLE 可以被其他应用程序读取
MODE_WORLD_WRITEABLE 可以被其他应用程序写入
实例:
public boolean saveCrimes(){
JSONArray array = new JSONArray();
try {
for (Crime c : mCrimeList){
array.put(c.toJSON());
}
} catch (JSONException e) {
e.printStackTrace();
return false;
}
OutputStream out = null;
try {
out = mAppContext.openFileOutput(FILE_NAME, Context.MODE_PRIVATE);
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
}
Writer writer = null;
try {
writer = new OutputStreamWriter(out);
writer.write(array.toString());
out.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
public boolean loadCrimes(){
if (null == mCrimeList){
mCrimeList = new ArrayList<Crime>();
}
mCrimeList.clear();
InputStream in = null;
BufferedReader reader = null;
try {
in = mAppContext.openFileInput(FILE_NAME);
reader = new BufferedReader(new InputStreamReader(in));
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
}
StringBuilder jsonString = new StringBuilder();
String line = null;
try {
while (null != (line = reader.readLine())){
jsonString.append(line);
}
reader.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
JSONArray array = null;
try {
array = (JSONArray) new JSONTokener(jsonString.toString()).nextValue();
for (int i = 0; i < array.length(); i ++){
mCrimeList.add(new Crime(array.getJSONObject(i)));
}
} catch (JSONException e) {
e.printStackTrace();
return false;
}
return true;
}
}