我有一个名为Train
的基类
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):
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类:
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;
,它包含两个元素:PassengerTrain
和FreightTrain
。我想创建方法来将arr
中的项写入文件,并从文件中读取数据
这是我的尝试:
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
派生类怎么办?
发布于 2018-06-06 07:30:36
只需让您的类实现Serializable,您就可以随时将对象写入文件(当然,还可以读回它们)!这也包括对象的数组。
这就是上面10000英尺的答案。正确地实现Serializable (以一种不会回来咬你的方式)是一个有点令人生畏的主题。然而,有很多文献可以教你如何做到这一点,以及如何避免常见的陷阱。为此,我个人推荐Joshua Bloch的"Effective“;他为这个主题专门写了一两章。
https://stackoverflow.com/questions/50710155
复制相似问题