文件存储
文件存储时Android中最基本的一种数据存储方式,它对存储内容不进行任何的格式化处理,所有的数据都是原封不动地保存到文件中,适合存储一些文本数据或者二进制数据。
将数据存储到文件中
首先需要得到一个附着在文件上的输出流,Context类中提供了一个openFileOutput()方法,返回的输出流用语将数据存储到指定的文件中。该方法接收两个参数:
文件名:创建文件时使用这个名称。注意
指定的文件名不可以包含路径,因为所有的文件都是默认存储到/data/data/package name/files/目录下
-
文件的操作模式:主要有两种,MODE_PRIVATE和MODE_APPEND。
- MODE_PRIVATE:是默认操作模式,表示当指定的文件存在时,所写入的内容将会覆盖原文件中的内容。
- MODE_APPEND:表示如果该文件已经存在就继续往里面写内容,不存在久创建该文件。
另外还有两种,MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE表示允许其他应用对我们程序文件进行读写操作,已经废弃。
openFileOutput()方法返回一个FileOutputStream对象,得到该对象就可以使用java流的方式将数据写入文件中。
private void save(String input) {
FileOutputStream out = null;
BufferedWriter writer = null;
try {
try{
out = getActivity().openFileOutput("data", Context.MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(input);
}
finally {
if(writer != null)
writer.close();
if(out != null)
out.close();
}
}catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
从文件中读取数据
类似的我们需要先得到一个附着在文件上的输入流,Context类中提供了一个openFileInput()方法,返回的输入流可以从文件中读取数据。该方法只接收一个参数:
- 文件名:根据指定文件名系统会自动到/data/data/package name/files/目录下去加载该文件,并返回一个FileInputStream对象。
得到了FileInputStream对象后,就可以使用java流的方式从文件中读取数据。
private String load() {
FileInputStream in = null;
BufferedReader reader = null;
StringBuffer content = new StringBuffer();
try{
try{
in = getActivity().openFileInput("data");
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while((line = reader.readLine()) != null)
content.append(line + "\n");
}finally {
if(reader != null)
reader.close();
if(in != null)
in.close();
}
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
return content.toString();
}