【问题标题】:How to serialize and deserialize in android?如何在android中序列化和反序列化?
【发布时间】:2015-10-10 12:33:01
【问题描述】:

我的 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 文件。 提前致谢

【问题讨论】:

    标签: java android serialization android-studio


    【解决方案1】:

    您不能写入 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

    【讨论】:

    • 什么是“上下文”?
    猜你喜欢
    • 1970-01-01
    • 2013-11-11
    • 2013-03-01
    • 2012-12-19
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    相关资源
    最近更新 更多