我在序列化对象时遇到了一些问题。
我认为我错过了一些东西,因为我的应用程序没有保存.dat应该是。
让我们展示一些代码:
加载.dat文件
public void gravar(ObjectOutputStream out) throws IOException {
out.writeObject(lista);
out.writeObject(cadeiras);
out.writeObject(notas);
out.close();
}
保存.dat文件
public void carregar(ObjectInputStream in) throws IOException, ClassNotFoundException {
lista=(ArrayList<String>) in.readObject();
cadeiras=(ArrayList<String>) in.readObject();
notas= (ArrayList<String>) in.readObject();
in.close();
}
当我尝试保存文件时,我的应用程序在此处捕获异常 FileNotFoundException :
case R.id.gravar:
ObjectOutputStream out;
try {
out = new ObjectOutputStream(new FileOutputStream(fich));
gravar(out);
Toast.makeText(getApplicationContext(), "nice!", Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
Toast.makeText(getApplicationContext(), "error1!", Toast.LENGTH_LONG).show();
e.printStackTrace();
} catch (IOException e) {
Toast.makeText(getApplicationContext(), "error2!", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
return true;
fich 是这样的:
private static String fich = "gravar.dat";
我错过了什么?为了更好的帮助,我在这里使用我的代码。
提前致谢!
答案 0 :(得分:0)
您应该将整个路径而不是文件名传递给FileOutputStream
。
如果这样做不起作用,请尝试
new FileOutputStream(new File(fich));
答案 1 :(得分:0)
解决方案是,而不是
out = new ObjectOutputStream(new FileOutputStream(fich));
粘贴此
out = new ObjectOutputStream(this.openFileOutput(fich, Context.CONTEXT_IGNORE_SECURITY));
输出相同。