将 CSV 文件中的值输入到 ArrayList 时出现问题

问题描述 投票:0回答:1

我正在尝试构建一个终端模式应用程序,允许用户输入某些属性作为对 80 年代发布的丰田汽车的过滤搜索。这是一个类的分配,因此存在一些限制,例如将原始数据保存在 CSV 文件中,并且数据必须加载到对象的 ArrayList 中(在我的例子中是丰田汽车)。我决定使用 BufferedReader 读取数据并将 CSV 文件中的值设置为实例化新车辆并将其添加到 ArrayList 的参数。

这是实现我刚才解释的方法:

public void load() {
        toyotaVehicleCatalog = new ArrayList<>();
        try(BufferedReader br = new BufferedReader(new FileReader("./src/files/80stoyota.csv"))) {
            String line = "";
            while((line = br.readLine()) != null) {
                String[] fields = line.split(",");
                int modelYear = Integer.parseInt(fields[0]);
                String modelName = fields[1];
                String modelCode = fields[2];
                String modelEngine = fields[3];
                boolean sedan = fields[4].length() > 0 ? true : false;
                String funFact = fields[5];

                ToyotaVehicle vehicle = new ToyotaVehicle(modelYear, modelName, modelCode, modelEngine, sedan,                   funFact);
                toyotaVehicleCatalog.add(vehicle);
            }

        } catch(IOException ex) {
            ex.printStackTrace();
        }
        
        for(int i = 0; i < toyotaVehicleCatalog.size(); i++) {
            System.out.println(toyotaVehicleCatalog.get(i));
        }

    } 

我的丰田车型:

public class ToyotaVehicle {
    private String modelCode;

    private int modelYear;

    private String modelName;

    private String engine;

    private boolean sedan;

    private String funFact;

    public ToyotaVehicle(int modelYear, String modelName, String modelCode, String engine, boolean sedan, String funFact) {
        this.modelCode = modelCode;
        this.modelYear = modelYear;
        this.modelName = modelName;
        this.engine = engine;
        this.sedan = sedan;
        this.funFact = funFact;
    }

    public ToyotaVehicle() {
    }

    public String getModelCode() {
        return modelCode;
    }

    public void setModelCode(String modelCode) {
        this.modelCode = modelCode;
    }

    public int getModelYear() {
        return modelYear;
    }

    public void setModelYear(int modelYear) {
        this.modelYear = modelYear;
    }

    public String getModelName() {
        return modelName;
    }

    public void setModelName(String modelName) {
        this.modelName = modelName;
    }

    public String getEngine() {
        return engine;
    }

    public void setEngine(String engine) {
        this.engine = engine;
    }

    public boolean isSedan() {
        return sedan;
    }

    public void setSedan(boolean sedan) {
        this.sedan = sedan;
    }

    public String getFunFact() {
        return funFact;
    }

    public void setFunFact(String funFact) {
        this.funFact = funFact;
    }

}

当我运行代码时,我收到此错误消息:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at data.LoadData.load(LoadData.java:28) at Driver.main(Driver.java:7)

如果我在这里遗漏了一个明显的错误,我提前道歉。我唯一尝试过的是首先我使用

files[]
数组值作为直接参数,而不是为每个数组值设置变量,没有运气。我已经阅读了与同一问题相关的大多数论坛/帖子,但尚未找到解决方案。我之前使用过 BufferedReader 几次,但从未遇到过这个问题。任何帮助将不胜感激,谢谢。

java arraylist bufferedreader
1个回答
0
投票

输入文件中有一个空行。可能在最后。这会导致

.split(",")
的结果为零长度数组,从而在尝试
ArrayIndexOutOfBoundsException
时产生
fields[0]
。琐碎地 通过在循环中检查这一点:

while((line = br.readLine()) != null) {
  if (line.isEmpty()) continue; // add this
  String[] fields = line.split(",");
  int modelYear = Integer.parseInt(fields[0]);
  ....
}
© www.soinside.com 2019 - 2024. All rights reserved.