我在谷歌搜索,无法找到我的问题的真实答案! 我的问题与him相同,但是他想要MODE_APPEND,我想要MODE_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;
}
}
答案 0 :(得分:1)
您不能将带斜杠(/
)的路径与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
构造函数boolean
true
毫无意义
getFD().sync()
上调用FileOutputStream
以确认所有字节都写入磁盘