我正在尝试将对象保存在文件中,但该文件未出现在设备上,我也没有异常。
public static void save(Context ctx) {
Log.i("App serialization", "Saving to settings.ser: " + ctx.getFileStreamPath("settings.ser"));
FileOutputStream fos = null;
ObjectOutputStream out = null;
try {
fos = ctx.openFileOutput("settings.ser", Context.MODE_PRIVATE);
out = new ObjectOutputStream(fos);
out.writeObject(ApplicationData.settings);
out.flush();
out.close();
//fos.close();
Log.i("App serialization", "Finished writing to settings.ser");
}
catch(IOException ex) {
ex.printStackTrace();
Log.e("App serialization", "Could not save to settings.ser");
}
}
如果我使用:
try {
fos = new FileOutputStream("/data/data/APP_PACKAGE/settings.ser");
out = new ObjectOutputStream(fos);
它可以工作,我可以看到该文件已在设备上创建。
但这并不酷,而且不是这样做的,因为目录结构将来可能会发生变化。
答案 0 :(得分:0)
首先,摆脱printStackTrace()
来电,并将IOException
对象改为android.util.Log
(例如,e()
来电中的第三个参数)。
其次,/data/data/APP_PACKAGE/settings.ser
不是您的文件将在您的第一个代码清单中结束的地方。它会进入/data/data/APP_PACKAGE/files/settings.ser
。
第三,当您的应用安装在SD上时,/data/data/APP_PACKAGE/settings.ser
可能不是Android 2.2上的有效路径。