尝试将文件行读入对象数组

时间:2014-06-02 16:27:27

标签: java arrays class object

我有一个像这样的文件:

Jim Smith, male, 12, 09/98/1992
Ben Todd, male, 12, 09/98/1992

我希望能够将这些行读入我的person对象,并将这些对象放入数组中。

这是我的代码。它是否正在抛出 NullPointerException

有什么想法吗?

public class Main {
    public static ArrayList<String> catagories = new ArrayList<String>();

    public static void main(final String[] args) throws IOException {
        File file = new File("manipulate-data.txt");
        System.out.println(file.getName() + " file exists = " + file.exists());

        BufferedReader bufferedReader = new BufferedReader(new FileReader(file));

        int iteration = 0;
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            if (iteration == 0) {

                String[] columns = line.split(",");
                for (String column : columns) {
                    catagories.add(column);
                }
                iteration++;
                continue;
            }
            sortFile(line);
        }

        bufferedReader.close();

    }

    private static void sortFile(String line) {
        String[] columns = line.split(",");
        Person[] newPerson = new Person[4];
        int i = 0;
        for (String column : columns) {
            newPerson[i].setName(column);
            newPerson[i].setSex(column);
            newPerson[i].setAge(column);
            newPerson[i].setBirth(column);
            i++;
        }
    }
}

1 个答案:

答案 0 :(得分:3)

  Person [] newPerson = new Person[4];

以上行是Person数组的声明。您需要在for循环中初始化Person以避免NPE

int i = 0;
for (String column : columns) {

   newPerson[i] = new Person();
   .....
}

修改

在您的代码中,您应该逐行阅读Person属性。并使用ArrayList而不是数组,因为您可能不知道数组大小的文件行号。

List<Person> persons= new ArrayList<Person>(); // Diamond <> operator for Java 7 
 String line;
 while ((line = bufferedReader.readLine()) != null) {
  persons.add(readPerson(line));
 }

....

readPerson方法中,您应该用逗号,分割您的行并阅读Person属性并返回Person个对象。

private static Person readPerson(String line) {
String[] columns = line.split(",");
Person  newPerson = new Person();

 newPerson.setName(columns[0]);
 newPerson.setSex(columns[1]);
 newPerson.setAge(columns[2]);
 newPerson.setBirth(columns[3]);

  return newPerson;
}