我在Google中搜索,找不到我问题的真实答案!我的问题与他相同,但他想要mode_append,我想要我的文件sode_private。我该怎么办?
这是我的代码:
public boolean saveCustomButtonInfo (Context context, Vector<DocumentButtonInfo> info) throws Exception{
String path= context.getFilesDir() + "/" + "Load";
File file = new File(path);
if(! file.exists()){
file.mkdir();
//Toast.makeText(context,file.getAbsolutePath(),Toast.LENGTH_LONG).show();
}
path=path+"/DocumentActivityCustomButtonsInfo.obj";
try{
FileOutputStream out=context.openFileOutput(path,Context.MODE_PRIVATE);
ObjectOutputStream outObject=new ObjectOutputStream(out);
outObject.writeObject(info);
outObject.flush();
out.close();
outObject.close();
return true;
}catch(Exception ex){
throw ex;
}
}
您不能使用带有openFileOutput()
的斜线(/
)的路径。更重要的是,您正在尝试将getFilesDir()
和openFileOutput()
同时组合,这是不必要的,并且引起了此问题。
将您的代码更改为:
public void saveCustomButtonInfo (Context context, List<DocumentButtonInfo> info) throws Exception {
File dir = new File(context.getFilesDir(), "Load");
if(! dir.exists()){
dir.mkdir();
}
File f = new File(dir, "DocumentActivityCustomButtonsInfo.obj");
FileOutputStream out=new FileOutputStream(f);
ObjectOutputStream outObject=new ObjectOutputStream(out);
outObject.writeObject(info);
outObject.flush();
out.getFD().sync();
outObject.close();
}
注意:
-
Vector
已经过时了〜15年 - 切勿使用串联来构建文件系统路径;使用适当的
File
构造函 - 抓住一个例外是没有意义的,只是重新启动它
- 返回始终是
true
的 - 在
FileOutputStream
上调用getFD().sync()
以确认所有字节都写入磁盘
boolean
没有意义