首页 > 解决方案 > 将文本文件读取到列表并将其分配给类属性

问题描述

我有一个从文本文件中读取的类,它分配给子类并给我:

java.lang.ArrayIndexOutOfBoundsException:2

我不明白,超级员工的构造函数是这样的:

public Employee(String employeeId, String fname, String lname, String dateOfBirth, String gender, String address, String titleOfEmployment, String dateHired, String department, double hoursWorked, double rateOfPay, String leaveDays, double carAllowance, double salary, double taxRate) {
    this.employeeId = employeeId;
    this.fname = fname;
    this.lname = lname;
    this.dateOfBirth = dateOfBirth;
    this.gender = gender;
    this.address = address;
    this.titleOfEmployment = titleOfEmployment;
    this.dateHired = dateHired;
    this.department = department;
    this.hoursWorked = hoursWorked;
    this.rateOfPay = rateOfPay;
    this.leaveDays = leaveDays;
    this.carAllowance = carAllowance;
    this.salary = salary;
    this.taxRate = taxRate;
}

这是读取文件的类:

public class Freader {

    // ** Reads the file one line at a time. Each line will is that split up and translated into a Passenger object */
    public static List < Employee > readline() throws IOException {
        List < Employee > employee = new ArrayList < > ();

        String file = "employees.txt";
        BufferedReader bf = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
        String line;

        while ((line = bf.readLine()) != null) {
            String[] tokens = line.split(" ");

            Employee emp = new Employee(tokens[0], tokens[1], tokens[2], tokens[3], tokens[4], tokens[5], tokens[6], tokens[7], tokens[8], Double.parseDouble(tokens[9]), Double.parseDouble(tokens[10]), tokens[11],  Double.parseDouble(tokens[12]), Double.parseDouble(tokens[13]), 
 Double.parseDouble(tokens[14]));

            emp.setEmployeeId(tokens[0].trim());
            emp.setFname(tokens[1].trim());
            emp.setLname(tokens[2].trim());
            emp.setDateOfBirth(tokens[3].trim());
            emp.setGender(tokens[4].trim());
            emp.setAddress(tokens[5].trim());
            emp.setTitleOfEmployment(tokens[6].trim());
            emp.setDateHired(tokens[7].trim());
            emp.setDepartment(tokens[8]);
            emp.setHoursWorked(Double.parseDouble(tokens[9]));
            emp.setRateOfPay(Double.parseDouble(tokens[10]));
            emp.setLeaveDays(tokens[11].trim());
            emp.setCarAllowance(Double.parseDouble(tokens[12]));
            emp.setSalary(Double.parseDouble(tokens[13]));
            emp.setTaxRate(Double.parseDouble(tokens[14]));

            employee.add(emp);

        }
        return employee;
    }

}

标签: javaarraylist

解决方案


从评论中,看起来数据是用逗号(,)分隔的,并且在代码中它是通过空格完成的。所以显然会失败。

代替

String[] tokens = line.split(" ");

应该

String[] tokens = line.split(",");

推荐阅读