dat文件包含以下格式的信息,该格式是使用writeUTF编写的:Fruit, Colour, Taste, Yes/No,最后一个是“是”或“不是”,但是它是一个字符串。
现在,类的定义如下
public class Food {
private String name;
private String colour;
private String taste;
private boolean availability;
public Food(String name, String colour, String taste, boolean availability) {
this.name = name;
this.colour = colour;
this.taste = taste;
this.availability = availability;
}
}当我读取dat文件时:
FileInputStream fis = new FileInputStream("food.dat");
DataInputStream dis = new DataInputStream(fis);我是否可以将一行文本立即转换为Food的实例?棘手的一点是String -> boolean。
最初,我想将文件的每一行添加到ArrayList中,然后将每一行从,中分割出来,并将其添加到一个庞大的字符串中,并使用if逻辑来处理Yes/No部件,但是如果有数千行这样的信息呢?这种做法不太有吸引力。
遗憾的是,如果这不是使用ObjectOutputStream编写的(某种类型的任务,我没有创建规则)。是否有方法从文件中读取一行并根据信息创建实例?
发布于 2015-05-22 17:58:51
为什么要把所有的东西都添加到列表中呢?通过readUTF读取每一行,在逗号上拆分,然后有一个方法从这4个组件生成一个Food对象。然后将你的食物对象添加到任何你想要的容器中。
public Food (String[] data){
if (data==null || data.length!=4){
// error handling
}
this.name=data[0];
...
this.availability="Yes".equals(data[3])
}发布于 2015-05-22 18:00:23
是的,你能做到的。要做到这一点,您需要知道数据的格式,并相应地编写解析器。
1)如果输入行(或)数据用, | :分隔,则拆分数据并为每一行创建Food对象。使用setters方法设置对象中的数据。
String[] splitData = input.split("delimiter");
//length and error check of SplitData
Food food = new Food();
food.setName(splitData[0]));
...(或)
通过Constructor将输入行传递给Food对象,并让构造函数执行拆分和数据分配。
Food(String input){
String[] splitData = input.split("delimiter");
//length and error check of SplitData
name = splitData[0];
...
}创建Food对象后,可以根据需要将其添加到任何集合中。
https://stackoverflow.com/questions/30403020
复制相似问题