Android中的文件存储是最基本的一种数据存储方式,它不对存储的数据进行任何的格式化处理,所有的数据都是原封不动地保存到文件当中,适合存储一些简单的文本数据或二进制数据。

Context类中提供了openFileOutput()方法和openFileInput()方法,用于将数据存储到指定的文件夹和从指定文件读取数据。


一、openFileOutput()方法

该方法接受两个参数,第一个参数是文件名,即创建文件的时候使用的文件名。
注:此处的文件名不能包含路径,因为所有的文件都是默认保存在(/data/data/packagename/files/)目录下的。第二个参数是文件的操作模式,主要有两种模式可选。 MODE_PRIVATE和MODE_APPEND。

MODE_PRIVATE —– 这是默认的操作模式,表示当指定同样文件名的时候,所写入的内容将会覆盖原文件中的内容。

MODE_APPEND —– 若指定的文件存在则在文件中追加新的内容,若文件不存在则创建新的文件。


文件操作的模式还有两种 MODE_WORLD_READABLEMODE_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对象,这样就可以对文件进行读取了。