基于原始数据创建实例

Instance creation based on primary data

一个dat文件包含以下格式的信息,使用writeUTF编写: Fruit, Colour, Taste, Yes/No ,最后一个是 Yes 或 No,但是,它是一个字符串。

现在,一个class定义如下

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中,然后把每一行从,中拆分出来加成一个String massive,然后用if逻辑来处理Yes/No 部分,但如果此信息有数千行怎么办?这种做法并没有太大的吸引力。

如果这不是使用 ObjectOutputStream 编写的,遗憾的是(某种分配,我没有创建规则)。有没有办法从文件中读取一行并根据信息创建一个实例?

为什么要将所有内容都添加到列表中?通过 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) 如果输入行(或)数据用 , | : 分隔,则拆分数据并为每一行创建 Food 对象。使用 setter 方法在对象中设置数据。

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