首页 > 解决方案 > 从 txt 文件创建对象,无需对每个对象进行硬编码

问题描述

我正在解决一个问题,其中我有一个需要转换为对象的 txt 文件。我的文件格式是:

阿拉巴马州::蒙哥马利::205764::155.4

州名和首都将作为 <String, Object> 加载到哈希图中。我已经成功加载了 Hashmap,但现在我需要创建每个单独的 Capital 对象。想知道是否有办法做到这一点,而无需对每个资本对象进行硬编码。也许是一个循环?不知道我如何在不硬编码的情况下命名它们。

到目前为止,这是我的主要方法:

 public static void main(String[] args) throws Exception {
    
    Scanner fileReader = new Scanner(new BufferedReader(new FileReader("MoreStateCapitals.txt")));
    Map<String, Object> stateCapitals = new HashMap<>();
    
    while (fileReader.hasNextLine()) {
        String[] columns = fileReader.nextLine().split("::");
        stateCapitals.put(columns[0], columns[1]);
    }
    
    Set<String> states = stateCapitals.keySet();
    Collection<Object> capitals = stateCapitals.values();
    
    
}

这是我的资本类,带有 getter、setter 和 Constructor

    
    private String name;
    private int population;
    private double squareMileage;

    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }

    public int getPopulation() {
        return population;
    }
    
    public void setPopulation(int population){
        this.population = population;
    }

    public double getSquareMileage() {
        return squareMileage;
    }
    
    public void setSquareMileage(double squareMileage){
        this.squareMileage = squareMileage;
    }

    public Capital(String name, int population, double squareMileage) {
        this.name = name;
        this.population = population;
        this.squareMileage = squareMileage;
    }
    
}

编辑: txt 文件中的第一个值的唯一用途是哈希图中的键,它不参与对象的创建

标签: javaobjectconstructorhashmapunmarshalling

解决方案


我相信你需要改变这条线:

stateCapitals.put(columns[0], columns[1]);

进入

stateCapitals.put(columns[0], new Capital(columns[1], Integer.parseInt(columns[2]), Double.parseDouble(columns[3]));

这样,您将使用构造函数来创建对象。这假设您从中读取数据的文件中没有错误 - 如果文件不正确,您可能需要在创建/插入步骤之前分析这些行。

此外,即使您Collection的 of Objectwill 工作,您可能希望将其更改为 aCollection<Capitals>以便能够访问您类的所有方法。

我希望它有所帮助。祝你好运。


推荐阅读