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
逻辑来处理{ {1}}部分,但如果这些信息有数千行呢?这种方法不太吸引人。
如果不是使用Yes/No
编写的,遗憾的是(某种类型的分配,我没有创建规则)。有没有办法从文件中读取一行并根据信息创建实例?
答案 0 :(得分:2)
为什么要将所有内容添加到列表中?通过readUTF读取每一行,用逗号分割,然后有一个方法从4个组件生成Food对象。然后将Food对象添加到您想要的任何容器中。
public Food (String[] data){
if (data==null || data.length!=4){
// error handling
}
this.name=data[0];
...
this.availability="Yes".equals(data[3])
}
答案 1 :(得分:1)
是的,你可以这样做。要做到这一点,您需要知道数据的格式并相应地编写解析器。
1)如果输入行(或)数据与, | :
分隔,则拆分数据并为每一行创建Food
个对象。使用setters方法在对象中设置数据。
String[] splitData = input.split("delimiter");
//length and error check of SplitData
Food food = new Food();
food.setName(splitData[0]));
...
(或)
通过构造函数将输入行传递给Food对象,让构造函数执行拆分和数据分配。
Food(String input){
String[] splitData = input.split("delimiter");
//length and error check of SplitData
name = splitData[0];
...
}
创建Food
对象后,您可以根据需要将其添加到任何集合中。