Когда я запускаю основной метод, следующие продолжал появляться:FileIO - исключение в потоке «главный» NullPointerException
Exception in thread "main" java.lang.NullPointerException
Я проверил мой код, но не смог найти какой-либо неинициализированный переменной. Может кто-нибудь, пожалуйста, помогите мне?
import java.io.FileNotFoundException;
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.Scanner;
public class FileIO
{
public static ArrayList<Person> readData(String fileName)
{
ArrayList<Person> personList = new ArrayList<Person>();
int index = -1;
try
{
File file = new File(fileName);
Scanner reader = new Scanner(file);
String s;
Person p = null;
boolean addressActive = false;
while (reader.hasNext())
{
s = reader.nextLine();
Scanner line = new Scanner(s);
String cmd;
if(line.hasNext())
{
cmd = line.next();
if(cmd.equalsIgnoreCase("name"))
{
index++;
p = new Person();
p.setName(line.nextLine());
personList.add(index,p);
addressActive = false;
}
else if(cmd.equalsIgnoreCase("birthday"))
{
if(line.hasNext())
{
p.setBirthday(line.nextLine());
personList.set(index, p);
}
addressActive = false;
}
else if(cmd.equalsIgnoreCase("phone"))
{
if(line.hasNext())
{
p.setPhone(line.nextLine());
personList.set(index, p);
}
addressActive = false;
}
else if(cmd.equalsIgnoreCase("email"))
{
if(line.hasNext())
{
p.setEmail(line.nextLine());
personList.set(index, p);
}
addressActive = false;
}
else if(cmd.equalsIgnoreCase("address"))
{
p.setAddress(line.nextLine());
personList.set(index, p);
addressActive = true;
}
else if(addressActive)
{
String address = p.getAddress() + " " + s;
p.setAddress(address);
personList.set(index, p);
}
else
System.out.println("Error: no command" +s);
}
}
reader.close();
return personList;
}
catch(Exception e)
{
System.out.println("Error");
return null;
}
}
}
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<Person> person1 = FileIO.readData("C:/Users/phoenix/Desktopsample_phonebook1.txt");
System.out.println(person1.size());
}
}
Похоже, я не вносил никаких изменений, проблема просто исправлена! Я действительно не знаю, почему !!!!! Мне потребовалось 3 часа, чтобы найти проблему, но через секунду она будет исправлена, не сообщая мне, что произошло. В любом случае спасибо за ур ребята добротой помощь ~~
An Исключением является номер строки. Добавьте e.printStackTrace() в предложение catch. –
И в зависимости от вашего файла p вполне может быть нулевым. –
Фактически, вы получите трассировку стека, удалив пряди, которая ее скрывает. Выньте свой блок Try/catch, так как вам лучше не иметь его. –