【问题标题】:Failing to write/read file with a list of objects无法使用对象列表写入/读取文件
【发布时间】:2015-07-29 22:13:00
【问题描述】:

我正在尝试将对象列表保存到文件中,但每当我尝试从文件中读取时,它总是会失败。谁能告诉我我做错了什么

给它写信

public void writeToFile(List<EventsClass> list)
{
    String filename = "events.srl";
    ObjectOutput out = null;

    try
    {
        out = new ObjectOutputStream(new FileOutputStream(new File(getFilesDir(),"")+File.separator+filename));
        out.writeObject(list);
        out.close();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
}

我检查过,参数列表总是包含一个对象列表

从中读取

public List<EventsClass> readFromFile()
{
    ObjectInputStream input;
    String filename = "events.srl";

    try
    {
        input = new ObjectInputStream(new FileInputStream(new File(new File(getFilesDir(),"")+File.separator+filename)));
        List<EventsClass> list = (List<EventsClass>) input.readObject();
        input.close();
        return list;
    }
    catch (IOException | ClassNotFoundException e)
    {
        e.printStackTrace();
        return null;
    }
}

读取文件总是失败,返回null

这里是EventsClass

public class EventsClass
{
    private String eventName;
    private String eventClass;
    private String eventDate;
    private int eventMonth;
    private int eventDay;

    public EventsClass(String eventClass, String eventName, String eventDate, int eventMonth, int eventDay)
    {
        this.eventClass = eventClass;
        this.eventName = eventName;
        this.eventDate = eventDate;
        this.eventMonth = eventMonth;
        this.eventDay = eventDay;
    }

    public void putEventData(String mClass, String name, String date, int month, int day)
    {
        this.eventClass = mClass;
        this.eventName = name;
        this.eventDate = date;
        this.eventMonth = month;
        this.eventDay = day;
    }

    public String getEventClass()
    {
        return eventClass;
    }

    public String getEventName()
    {
        return eventName;
    }

    public String getEventDate()
    {
        return eventDate;
    }

    public int getEventMonth()
    {
        return eventMonth;
    }

    public int getEventDay()
    {
        return eventDay;
    }
}

【问题讨论】:

  • 对其进行了更新以向您展示 EventsClass。我通常使用 sharedpreferences,这是我第一次在 java 中实现文件 i/o 系统
  • 你没有得到堆栈跟踪?
  • 不需要。 EventsClass 不可序列化;对象没有被写入,因此无法读取

标签: java android object file-io


【解决方案1】:

是的,EventsClass 需要可序列化才能写入存储。如果你有它实现java.io.Serializable,一切都应该适合你。 Here is a decent tutorial 你更了解 java 序列化发生了什么。

【讨论】:

    猜你喜欢
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 2013-04-27
    相关资源
    最近更新 更多