gpt4 book ai didi

java - android中如何进行序列化和反序列化?

转载 作者:行者123 更新时间:2023-12-01 11:04:52 26 4
gpt4 key购买 nike

我的 mainActivity 有一个 ListView,它应该显示我的 CustomList:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;

public class CustomList implements Serializable {
private static final long serialVersionUID = 1L;
private ArrayList<Game> list = new ArrayList<Game>();
public void add(Game toAdd){
list.add(toAdd);
}
public Game get(int id){
return list.get(id);
}
public ArrayList<Game> getList(){
return list;
}
public void serialize(){
try {
FileOutputStream fo = new FileOutputStream("res\\data.dat");
ObjectOutputStream ou = new ObjectOutputStream(fo);
ou.writeObject(list);
ou.close();
fo.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void deserialize(){
try {
FileInputStream fi = new FileInputStream("res\\data.dat");
ObjectInputStream oi = new ObjectInputStream(fi);
list = (ArrayList<Game>)oi.readObject();
oi.close();
fi.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

尝试序列化或反序列化时出现以下错误:

java.io.FileNotFoundException: res\data.dat: open failed: ENOENT (No such file or directory)

我的问题是如何正确指向我的 data.dat 文件。提前致谢

最佳答案

你不能写入res目录(这是只读的),你必须写入其他地方,例如到缓存目录(如果它只是临时的;使用 context.getCacheDir() 来获取它的位置)或某个永久空间(例如 context.getFilesDir() )。

您可以像这样获取文件位置,并将其传递给 FileOutputStream 或 FileInputStream 的构造函数:

File file = new File(context.getFilesDir(), "data.dat");

如果您选择这样做,您可能还需要请求写入外部存储的权限。

在此处了解有关在 Android 中存储文件的更多信息:http://developer.android.com/training/basics/data-storage/files.html

关于java - android中如何进行序列化和反序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33054035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com