#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
вашем вы читаете много строк за один раз. Вы уверены, что ваш файл содержит все эти строки ? в противном случае aNoSuchElementException
будет выброшен3. Также сверьте формат вашего файла с кодом. Можете ли вы включить соответствующий раздел данных (убедитесь, что это не реальные данные для реальных людей, очевидно, по соображениям конфиденциальности)?
4. подожди, дай мне попробовать
5. в нем говорится, что дата не может быть изменена, но почему мой формат даты не изменился, когда я уже использую форматер