Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android:无法写入文件目录,但可以写入包目录_Android_Serialization_File - Fatal编程技术网

android:无法写入文件目录,但可以写入包目录

android:无法写入文件目录,但可以写入包目录,android,serialization,file,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;

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

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);
它可以工作,我可以看到该文件已在设备上创建

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

首先,去掉printStackTrace调用,将IOException对象提供给android.util.Log,例如,e调用中的第三个参数

第二,/data/data/APP_PACKAGE/settings.ser不是第一个代码列表中的文件。它将进入/data/data/APP_PACKAGE/files/settings.ser


第三,/data/data/APP_PACKAGE/settings.ser可能不是Android 2.2上的有效路径,当你的应用程序安装在SD上时。

我怀疑这是一个权限问题,所以它没有在logcat或任何东西中吐出任何错误?有警告吗?logcat中没有。我考虑过权限问题,已经卸载了一个重新安装的软件,但仍然一无所获。1-谢谢2和3-我知道这一点;这是我在帖子的最后一句话。如果我尝试在/files子目录中写入,它将不起作用,但是如果我在app-package-dir中写入,它将起作用。尝试构建一个新的模拟器映像或其他东西。您不可能既可以写入您所在的位置,又无法写入文件/。但是,如果您尝试写入文件/的唯一方法是通过上面的save方法,那么可以尝试不同的上下文。例如,如果您使用的上下文来自getApplicationContext,请将其替换为最初调用getApplicationContext的活动或服务。有趣的是,我使用相同的上下文,在代码的其他地方使用openFileOutput和FileOutputStream将文件下载到files/dir。