首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java将对象数组写入和读取到文件

Java将对象数组写入和读取到文件
EN

Stack Overflow用户
提问于 2018-06-06 07:14:03
回答 1查看 1.6K关注 0票数 0

我有一个名为Train的基类

代码语言:javascript
复制
public abstract class Train {
    String serialNo;
    float weight;
    final String label;

    public Train(String serialNo, float weight, String label) {
        this.serialNo = serialNo;
        this.weight = weight;
        this.label = label;
    }

    public abstract float getCapacity();
}

我有两个实现抽象类的类(我不会在代码中包含getter和setter):

代码语言:javascript
复制
public class FreightTrain extends Train implements Cloneable {

    private float capacityKg;
    Vector<String> freightVector = new Vector<String>();

    public FreightTrain(String serialNo, float weight, String label) throws Exception{
        super(serialNo, weight, label);
        if (weight < 0)
            throw new Exception();
    }

    @Override
    public float getCapacity() {
        return this.capacityKg;
    }
}

和PassengerTrain类:

代码语言:javascript
复制
public class PassengerTrain extends Train implements Cloneable {

    private float seatNo;
    Vector<String> passengerId = new Vector<String>();

    public PassengerTrain(String serialNo, float weight, String label) throws Exception{
        super(serialNo, weight, label);
        if (weight < 0)
            throw new Exception();
    }

    @Override
    public float getCapacity() {
        return this.seatNo;
    }
}

接下来,我有一个数组列表ArrayList<Train> arr;,它包含两个元素:PassengerTrainFreightTrain。我想创建方法来将arr中的项写入文件,并从文件中读取数据

这是我的尝试:

代码语言:javascript
复制
public void writeObjectInTextFile(ArrayList<Train> array) {
    Formatter f = null;
    try {
        f = new Formatter(file);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    for(Train train: array) {

        if(train instanceof PassengerTrain) {
            String label = train.getLabel();
            String serialNo = train.getSerialNo(); 
            float capacity = train.getCapacity();
            float weight = train.getWeight();
            float seatNo = ((PassengerTrain) train).getSeatNo();
            String passId = "";

            for(String id:((PassengerTrain) train).getPassengerId()) {
                passId += id;
            }

            f.format("%s %f %s %f %f %s", serialNo, weight, label, capacity, seatNo, passId);
        } else if(train instanceof FreightTrain) {
            String label = train.getLabel();
            String serialNo = train.getSerialNo(); 
            float capacity = train.getCapacity();
            float weight = train.getWeight();
            float capacityKg = ((FreightTrain) train).getCapacityKg();
            String freightVector = "";

            for(String freight: ((FreightTrain) train).getFreightVector()) {
                freightVector += freight;
            }

            f.format("%s %f %s %f %f %s", serialNo, weight, label, capacityKg, capacity, freightVector);
        }
    }
    f.close();
}

但是我有一个问题:我无法创建一个函数来从文件中读取这些数据,并返回包含初始数据的正确ArrayList。

将从单个类派生的2个不同类的数组写入文件的最佳和最快的方法是什么?

以及如何重新创建它?

谢谢!

请不要重复我的问题。我已经搜索过类似的问题,但我的问题与可用的问题不同。

我不知道如何将对象从文件转换回它们各自的类型。如果我有n派生类怎么办?

EN

回答 1

Stack Overflow用户

发布于 2018-06-06 07:30:36

只需让您的类实现Serializable,您就可以随时将对象写入文件(当然,还可以读回它们)!这也包括对象的数组。

这就是上面10000英尺的答案。正确地实现Serializable (以一种不会回来咬你的方式)是一个有点令人生畏的主题。然而,有很多文献可以教你如何做到这一点,以及如何避免常见的陷阱。为此,我个人推荐Joshua Bloch的"Effective“;他为这个主题专门写了一两章。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50710155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档