基于主要数据的实例创建

时间:2015-05-22 17:54:47

标签: java inputstream

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编写的,遗憾的是(某种类型的分配,我没有创建规则)。有没有办法从文件中读取一行并根据信息创建实例?

2 个答案:

答案 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对象后,您可以根据需要将其添加到任何集合中。