【问题标题】:android: can't write to files dir but can in package dirandroid:无法写入文件目录但可以在包目录中
【发布时间】:2011-03-12 06:19:19
【问题描述】:

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

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

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

但这并不酷,也不是这样做的方法,因为目录结构将来可能会改变。

【问题讨论】:

  • 我偷偷怀疑这是一个权限问题 - 所以它没有在 logcat 或任何东西中吐出任何错误?有什么警告吗?
  • logcat 中没有任何内容。想到了权限问题,卸载了重装了还是什么都没有。

标签: android serialization file


【解决方案1】:

首先,去掉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 上的有效路径。

【讨论】:

  • 第 1 - 谢谢第 2 和第 3 - 我知道;这就是我在帖子的最后一句中所说的。如果我尝试在 /files 子目录中写入它将不起作用,但如果我在应用程序包目录中写入它将起作用。
  • 尝试构建一个新的模拟器图像或其他东西。您无法写信到您所在的位置,也无法写信到files/。但是,如果您尝试写信给files/ 的唯一方法是通过上面的save() 方法,也许可以尝试不同的Context。例如,如果您使用的 Context 来自 getApplicationContext(),请将其替换为最初调用 getApplicationContext()ActivityService
  • 这很有趣,因为我在代码的其他地方使用 openFileOutput() 和 FileOutputStream 使用相同的 Context 将文件下载到 files/ 目录。
猜你喜欢
  • 1970-01-01
  • 2016-02-17
  • 2018-01-01
  • 1970-01-01
  • 2016-04-22
  • 2010-11-07
  • 2018-04-30
  • 1970-01-01
相关资源
最近更新 更多