0

我想做的是:

  1. 创建一个 Employee 类,该类具有文件中提到的私有字段。
  2. 从文件夹中的文件(有 150 个文件)中读取内容,并为每个文件创建员工对象。
  3. 存储在 Collection 中创建的 Employee 对象
  4. 创建将根据不同字段以升序和降序对员工集合进行排序的方法。

我的第一 3 行代码是:

package com.fulcrum.emp;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class TestingColections {

    public static void main(String[] args) {

        File folder = new File("D:\\employee files");
        File[] listOfFiles = folder.listFiles();
        ArrayList<Employee> emp = null;
        int id = 0;
        String name = null;
        int age = 0;
        for (File file : listOfFiles) {

            try {
                Scanner scanner = new Scanner(file);

                String tokens = "";
                String[] newtokens = null;

                while (scanner.hasNext()) {

                    tokens = tokens.concat(scanner.nextLine()).concat(" ");

                    tokens = tokens.replace("=", "|");
                    newtokens = tokens.split("[|\\s]");

                }

                id = Integer.parseInt(newtokens[1]);
                name = (newtokens[3] + " " + newtokens[4]);
                age = Integer.parseInt(newtokens[6]);

                emp = new ArrayList<Employee>();

                emp.add(new Employee(id, name, age));

            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }

        }

    }

}

我的问题不仅仅是add()我尝试使用 for 循环在指定索引中添加对象,但它给出了IndexOutOfBoundException
我该怎么做?有人可以帮忙吗?
而且我想根据不同的领域对那些卑鄙的人进行排序。
也请指导我。

4

2 回答 2

0

如果没有堆栈跟踪,就不可能知道,但 IndexOutOfBoundsException 听起来很可能在以下几行中:

id = Integer.parseInt(newtokens[1]);
name = (newtokens[3] + " " + newtokens[4]);
age = Integer.parseInt(newtokens[6]);

您相信 newtokens 至少有 7 个元素。

newtokens在这里设置

newtokens = tokens.split("[|\\s]");

因此,在至少一个输入文件中可能存在至少一行,其中该正则表达式生成少于 7 个标记。

您是否检查了每个文件的每一行以确保它符合您的预期格式?

在解析这样的文件时,我更喜欢先检查这些期望,然后抛出一个有意义的异常以使故障排除更容易。

if (newtokens.length < 7) {
    throw new Exception("Too few tokens on line " + lineNumber + " of file " + file.getAbsolutePath());
}
于 2013-06-02T05:47:14.430 回答
0

如果没有堆栈跟踪,很难理解问题出在哪里,但可能是这样:您可以添加到 ArrayList 中的特定索引,但前提是该索引存在。

如果你有一个大小为 2 的列表,你可以添加到索引 0 或索引 1。

如果您的 ArrayList 没有任何成员,您只能添加到索引 0。任何尝试添加不存在的索引都将导致您得到的 ArrayIndexOutOfBounds 错误

于 2013-06-02T05:49:57.477 回答