Java 序列化对象

Java Serialization Object

对于我的 android 工作室项目,我需要序列化一个用户对象。这个想法是保存和加载这个对象,所以当应用程序关闭(被销毁)时,对象及其属性被保存并存储在一个文件中。我的问题是加载对象时出错。虽然我尝试创建它,但它说没有名为 'save.bin' 的文件或目录。这是我的代码:

    public class SaveAndLoadManager{
        public void save(Object object){
            Log.d("Save", "saving object");
            try{
                File userInfo = new File("save.bin");
                FileOutputStream fileOutputStream = new FileOutputStream(userInfo);
                ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
                objectOutputStream.writeObject(object);
                objectOutputStream.close();
                Log.d("Save", "object saved");
            }catch(FileNotFoundException e){
                Log.e("Save", e.getMessage());
            }catch(IOException e){
                Log.e("Save", e.getMessage());
            }
        }
        public Object load(){
            Log.d("Load", "loading object");
            Object object = null;
            try{
                FileInputStream fileInputStream = new FileInputStream("save.bin");
                ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
                object = objectInputStream.readObject();
                objectInputStream.close();
                Log.d("Load", "object loaded");
            }catch(FileNotFoundException e){
                Log.e("Load", e.getMessage());
            }catch(StreamCorruptedException e){
                Log.e("Load", e.getMessage());
            }catch(Exception e){
                Log.e("Load", e.getMessage());
            }
            return object;
        }
    }

如何正确创建目录?

假设 User 正在实施 Serialazible

File userInfo = new File("save.bin");

你可以想想上面这行,就像一个文件对象,叫做"save.bin",存储在根目录下,(/)文件系统。您的应用程序无法写入此位置。您的应用程序具有两个写入位置的权限,一个存储在 /data/data/yourapp 下,另一个存储在 /sdcard/Android/data/yourapp 下。两者都应该通过 public api 访问。例如。您可以使用 openFileOutput/openFileInput 对来检索 FileOutputStream/FileInputStream

FileOutputStream fileOutputStream = openFileOutput("save.bin", Context.MODE_PRIVATE)
FileInputStream fileInputStream = openFileInput("save.bin");

正如@androidLerner 在他的评论中提到的, 您可以找到更多信息 here