Android编程中FileOutputStream与openFileOutput()的区别分析

2019-12-10 19:10:04丽君

File sdCardDir = new File("/sdcard"); //获取SDCard目录
File saveFile = new File(sdCardDir, "itcast.txt"); 
//上面两句代码可以合成一句: File saveFile = new File("/sdcard/a.txt");
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("test".getBytes());
outStream.close();

最后附上一个使用openFileOutput的例子存取对象:

public class MainActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }
  public void button(View view){
    Person p = new Person();
    p.setAge(10);
    p.setName("Lee");
    saveObject(p, "MainActivity.dat");
  }
  public void button2(View view){
    Person p = (Person) readObject("MainActivity.dat");
    System.out.println(p.getAge());
  }
  public boolean saveObject(Serializable ser, String file) {
    FileOutputStream fos = null;
    ObjectOutputStream oos = null;
    try{
      fos = openFileOutput(file, MODE_PRIVATE);
      oos = new ObjectOutputStream(fos);
      oos.writeObject(ser);
      oos.flush();
      return true;
    }catch(Exception e){
      e.printStackTrace();
      return false;
    }finally{
      try {
        oos.close();
      } catch (Exception e) {}
      try {
        fos.close();
      } catch (Exception e) {}
    }
  }
  /**
   * 读取对象
   * @param file
   * @return
   * @throws IOException
   */
  public Serializable readObject(String file){
    FileInputStream fis = null;
    ObjectInputStream ois = null;
    try{
      fis = openFileInput(file);
      ois = new ObjectInputStream(fis);
      return (Serializable)ois.readObject();
    }catch(FileNotFoundException e){
    }catch(Exception e){
      e.printStackTrace();
      //反序列化失败 - 删除缓存文件
      if(e instanceof InvalidClassException){
        File data = getFileStreamPath(file);
        data.delete();
      }
    }finally{
      try {
        ois.close();
      } catch (Exception e) {}
      try {
        fis.close();
      } catch (Exception e) {}
    }
    return null;
  }
}
class Person implements Serializable{
  int age;
  String name;
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
}