Как прочитать объект списка массивов в текстовый файл на java?

#java #arraylist

Вопрос:

Я хочу создать метод, с помощью которого я смогу считывать текстовый файл в списки массивов. Мой список ArrayList содержит объекты, я использую некоторую систему из println, чтобы определить, где что-то пошло не так, и оказывается, что это часть цикла while, может ли кто-нибудь мне помочь?

 public class DataIO {  public static ArrayListlt;CitizenDatagt; citizenData = new ArrayListlt;CitizenDatagt;();  public static ArrayListlt;AppointmentDatagt; appointment = new ArrayListlt;AppointmentDatagt;();  public static void read(){  try{  Scanner s = new Scanner(new File("Citizen.txt"));  DateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");  while(s.hasNext()){  String fullName = s.nextLine();  String numberID = s.nextLine();  int age = Integer.parseInt(s.nextLine());  Date date = formatter.parse(s.nextLine());  String address = s.nextLine();  String phoneNum = s.nextLine();  String email = s.nextLine();  s.nextLine();  CitizenData data = new CitizenData(fullName,numberID,age,date,address,phoneNum,email);  citizenData.add(data);  }  Scanner sc = new Scanner(new File("Appointment.txt"));  DateFormat formatter1 = new SimpleDateFormat("dd-MMM-yyyy");  DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MMM-yyyy HH:mm");  while(s.hasNext()){  CitizenData numberID = DataIO.check(s.nextLine());  VaccinationCentre vacCentre = VaccinationCentre.valueOf(s.nextLine());  LocalDateTime date = LocalDateTime.parse(s.nextLine());  String vaccineType = s.nextLine();  s.nextLine();  AppointmentData data1 = new AppointmentData(numberID, vacCentre, date,vaccineType);  appointment.add(data1);  }  }catch(Exception e){  System.out.println("Error in read");  }  }    public static void write(){  try{  PrintWriter p = new PrintWriter("Citizen.txt");  for(int i=0; ilt;citizenData.size(); i  ){  p.println(citizenData.get(i).getFullName());  p.println(citizenData.get(i).getNumber());  p.println(citizenData.get(i).getAge());  p.println(citizenData.get(i).getDob());  p.println(citizenData.get(i).getAddress());  p.println(citizenData.get(i).getPhoneNum());  p.println(citizenData.get(i).getEmail());  p.println();  }  p.close();  PrintWriter q = new PrintWriter("Appointment.txt");  for(int i=0; ilt;appointment.size(); i  ){  AppointmentData j = appointment.get(i);  q.println(j.getNumberID());  q.println(j.getVaccineCentre());  q.println(j.getDate());  q.println(j.getVaccineType());  q.println();  }  q.close();  } catch(Exception e){  System.out.println("Error in write!");  }  }    public static CitizenData check(String x){  for(CitizenData d : citizenData){  if(d.equals(d.getNumber())){  return d;  }  }  return null;  } }  

Но здесь каждый раз, когда я запускаю код, он продолжает попадать в ловушку и говорит «ошибка при чтении». Мой код неверен, но в какой его части?

Комментарии:

1. System.out.println("Error in read") , это не очень полезная обработка исключений, ни для вас, ни для нас. Распечатайте трассировку стека исключений в своем catch предложении через e.printStackTrace() и добавьте ее в свой вопрос. (А также взгляните на отслеживание исключений самостоятельно, возможно, вы даже сами узнаете, что пошло не так)

2. В while-loop вашем вы читаете много строк за один раз. Вы уверены, что ваш файл содержит все эти строки ? в противном случае a NoSuchElementException будет выброшен

3. Также сверьте формат вашего файла с кодом. Можете ли вы включить соответствующий раздел данных (убедитесь, что это не реальные данные для реальных людей, очевидно, по соображениям конфиденциальности)?

4. подожди, дай мне попробовать

5. в нем говорится, что дата не может быть изменена, но почему мой формат даты не изменился, когда я уже использую форматер