Android中的文件存储是最基本的一种数据存储方式,它不对存储的数据进行任何的格式化处理,所有的数据都是原封不动地保存到文件当中,适合存储一些简单的文本数据或二进制数据。
Context类中提供了openFileOutput()方法和openFileInput()方法,用于将数据存储到指定的文件夹和从指定文件读取数据。
一、openFileOutput()方法
该方法接受两个参数,第一个参数是文件名,即创建文件的时候使用的文件名。
注:此处的文件名不能包含路径,因为所有的文件都是默认保存在(/data/data/packagename/files/)目录下的。第二个参数是文件的操作模式,主要有两种模式可选。 MODE_PRIVATE和MODE_APPEND。
MODE_PRIVATE —– 这是默认的操作模式,表示当指定同样文件名的时候,所写入的内容将会覆盖原文件中的内容。
MODE_APPEND —– 若指定的文件存在则在文件中追加新的内容,若文件不存在则创建新的文件。
文件操作的模式还有两种 MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE,这两种模式允许其他应用程序对我们的文件进行读写操作,由于这两种模式很容易造成安全问题,所以已经在Android4.2版本中被废弃。
下面是openFileOutput()方法的使用:
/**
* 保存数据到文件
* @param data 需要保存的数据
* @param fileName 文件名
*/
public void saveToFile(String data, String fileName){
FileOutputStream out = null;
BufferedWriter writer = null;
try {
out = openFileOutput(fileName, Context.MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(data);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (writer != null){
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
上面的代码中通过openFileOutput()方法得到一个FileOutputStream对象,然后再借助于它构建出一个OutputStreamWriter对象,接着再使用OutputStreamWriter对象构建出一个BufferedWriter对象,这样就可以通过BufferedWriter将内容写入 文件中。
二、openFileIntput()方法
该方法只接受一个参数,即要读取的文件名,它会自动到/data/data/packagename/files/下面找该文件,并返回一个FileInputStream对象,再使用java流进行读取。
/**
* 读取存储的文件内容
* @param fileName 要读取文件的文件名
* @return
*/
public String loadFile(String fileName) {
FileInputStream in = null;
BufferedReader reader = null;
StringBuilder content = new StringBuilder();
try {
in = openFileInput(fileName);
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line = reader.readLine()) != null) {
content.append(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
return content.toString();
}
上面的代码中通过openFileInput()方法获得了一个FileInputStream对象,然后再使用InputStreamReader构建出一个BufferedReader对象,这样就可以对文件进行读取了。