反序列化对象-如何进行?

时间:2019-06-22 08:20:27

标签: android objectinputstream

在IntelliJ中,我创建了一个Trie对象并将其序列化为一个名为“ t.txt”的文件。我将此文件移到与Android Studio中MainActivity.java相同的目录中,然后运行以下代码尝试获取该对象:

String fileName = "t.txt";
Trie trie = null;
try {
     FileInputStream fis = new FileInputStream(fileName);
     ObjectInputStream ois = new ObjectInputStream(fis);
     trie = (Trie) ois.readObject();
     ois.close();
}
catch(IOException e) {
     System.out.println(e);
}
catch(java.lang.ClassNotFoundException e) {
     System.out.println(e);
}

这给了我一个“找不到文件”错误,指示它无法打开。但是,同样的代码在IntelliJ中也能很好地工作。

如何在Android Studio中从t.txt恢复此对象?

1 个答案:

答案 0 :(得分:0)

这是另一种选择。将文件序列化为getFilesDir()并从那里获取文件。这样,您可以轻松进行序列化和反序列化。

要检查getFilesDir()中是否存在文件:

boolean doesMyFileExists(Activity activity, String fileName) {
    File[] files = activity.getFilesDir().listFiles();
    for(File i: files) {
        if(i.getName().equals(fileName)) {
            return true;
        }
    }
    return false;
}



要序列化对象(MyObject):

void serializeObject(Activity activity, MyObject myObject, String fileName){
    try {
        FileOutputStream fos = activity.openFileOutput(fileName, Context.MODE_PRIVATE);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(myObject);
        oos.close();
        fos.close();
    }
    catch(Exception e) {
        //Catch all possible exceptions here
    }

 }



要反序列化对象(MyObject):

MyObject deserializeObject(Activity activity, String fileName){
    try {
        return ((MyObject) (new ObjectInputStream(activity.openFileInput(fileName)).readObject()););
    }
    catch(Exception e) {
        //Catch all possible exceptions here
    }

 }


注意:包含这些方法的类必须实现Serializable接口。



希望对您有所帮助,编码愉快!