2014-02-04 3 views
0

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

Моя проблема заключается в попытке создать функцию поиска, которая позволяет вам искать свой идентификационный номер и цифры, если вы уже находитесь в файле. Это мой метод ActionListener:

public void actionPerformed(ActionEvent e) 
     { 
      strID = tfID.getText(); 
      strName = tfName.getText(); 
      strYear = tfYear.getText(); 
      strSubject = tfSubject.getText(); 
      dblGPA = Double.parseDouble(tfGPA.getText()); 
      strComment = tfComment.getText(); 
      Student newStudent = new Student(strID, strName, strYear, strSubject, dblGPA, strComment); 
      ArrayList<Student> studentInfo = new ArrayList<Student>(); 
      studentInfo.add(newStudent); 
      try { 
       writeFile(studentInfo); 
       System.out.println(loadFile().toString()); 
      } catch (IOException e1) { 
       e1.printStackTrace(); 
      } catch (ClassNotFoundException e1) { 
       e1.printStackTrace(); 
      }  
     } 

Тогда мой читать и писать методы:

public static void writeFile(ArrayList<Student> studentInfo) throws IOException { 

    FileOutputStream fos = new FileOutputStream(new File("studentlog.dat"), true); 
    ObjectOutputStream oos = new ObjectOutputStream(fos); 
    oos.writeObject(studentInfo); 
    oos.close(); 
} 

public static ArrayList<Student> loadFile() throws IOException, ClassNotFoundException { 

    FileInputStream fis = new FileInputStream(new File("studentlog.dat")); 
    ObjectInputStream ois = new ObjectInputStream(fis); 
    ArrayList<Student> sAL = (ArrayList<Student>) ois.readObject(); 
    ois.close(); 
    return sAL; 
} 

Теперь мне просто нужен метод ActionListener для кнопки поиска, которая будет искать идентификационный номер из JTextField tfSearch, то сравните его с существующими идентификационными номерами в файле. Я чувствую, что делаю что-то ужасно неправильно, но это может быть просто глупая ошибка.

ответ

0

Если вы используете List вы должны пройти по ней, чтобы проверить, существует ли объект с определенным идентификатором.

Если вы с помощью Map<String, Student> (как уже упоминалось Andres), где ключ карты является ваш ID, вы можете легко использовать containsKey(String id)

0

Вместо ArrayList используйте карту, где ключ является идентификатором, а значение является учащимся. Это значительно упростит поисковые запросы.

Map<String, Student> studentMap = new HashMap<String, Student>()

Смежные вопросы