我有一个像这样的文件:
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++;
}
}
}
答案 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;
}