在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恢复此对象?
答案 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
接口。
希望对您有所帮助,编码愉快!