android:无法写入文件dir但可以在包dir中

时间:2010-07-06 10:52:24

标签: android serialization file

我正在尝试将对象保存在文件中,但该文件未出现在设备上,我也没有异常。

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);

它可以工作,我可以看到该文件已在设备上创建。

但这并不酷,而且不是这样做的,因为目录结构将来可能会发生变化。

1 个答案:

答案 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上的有效路径。