从CSV文件读取到对象

时间:2013-11-20 23:19:51

标签: java arrays csv arraylist nosuchelementexception

我需要帮助从文件中读取: 我的文件看起来完全像:

2,
Bob,
1,
Hand, 10.0, Broken,
John,
Leg, 20.0, Broken,
Hand, 10.0, Broken, //this comma has to be here

我需要将这些数据加载到存储Bob和John的数组中,并将其导入 的ArrayLists。

默认患者构造函数为每个构建器创建arrayList。

我的代码看起来像这样:

public void load(File f) {
    try {
        BufferedReader br = new BufferedReader(new File Reader(f));
        String nextLine = br.readLine();
        while (nextLine!=null) {
        StringTokenizer st = new StringTokenizer(nextLine, ",");
        int numberOfPatients = Integer.praseInt(st.nextToken());

        for (int j=0 j<numberOfPatients; j++) {
            String name = st.nextToken();   // This is the place where I get NoSuchElementException
            int age = Integer.parseInt(st.nextToken());
            this.patients[j-1] = new Patient(name,age);
            int numberOfInjuries = Integer.parseInt(st.nextToken());

            for (int i=0; i<numberOfInjuries-1; i++) {
                String type = (st.nextToken());

                if (type.equals("Leg")) {
                    int cost = Integer.parseInt(st.nextToken());
                    String injury = st.nextToken();
                    // addInjury - function to add new injury to the arrayList
                    this.patients[j].addInjury(new Leg(cost, injury));
                } else if (type.equals("Hand")) {
                    int cost = Integer.parseInt(st.nextToken());
                    String injury = st.nextToken();
                    this.patients[j].addInjury(new Hand(cost, injury);
                }
            nextLine = br.readLine();
        }
        br.close();
    } catch(Exception ex) {
        System.out.println(ex);
        System.exit(1);
    }
}

它返回java.util.NoSuchElementException。 如果有人能帮助我,我将不胜感激! THX!

2 个答案:

答案 0 :(得分:2)

bufferedReader的工作方式是分别解析每一行。这就是你在 String nextLine = br.readLine()所做的事情 - 每次读一个新行。

使用您的CSV文件,您只需阅读第一行 - 2,。获得NoSuchElementException的原因是第一行没有其他内容。标记器无法为当前字符串找到任何其他内容。您要么必须更改解析输入的方式,要么在继续之前读入下一行。

答案 1 :(得分:-1)

语法错误:

Integer.praseInt(st.nextToken());

....应该是 parse

for (int j=0 ....

缺少 ;