Я хочу сделать ArrayList
Студента и сохранить его в файл для последующего использования. Я успешно написал его, но когда я прочитал его до ArrayList
, у меня есть только один объект.Java - Как читать файл в ArrayList объектов?
public class Student implements Serializable{
public String fname, lname, course;
int section;
private static final long serialVersionUID = 1L;
public static ArrayList<Student> students = getStudent();
public Student() {
}
public Student(String fname, String lname, String course, int section){
this.fname = fname;
this.lname = lname;
this.course = course;
this.section = section;
}
public static void addStudent(){
String fname = GetInput.getInput("Enter the First Name: ");
String lname = GetInput.getInput("Enter the Last Name: ");
String course = GetInput.getInput("Enter the Course: ");
String S_section = GetInput.getInput("Enter the section: ");
int section = Integer.parseInt(S_section);
Student student = new Student(fname, lname, course, section);
students.add(student);
System.out.println("Writing to file...");
try {
writeToFile(student);
} catch (FileNotFoundException ex) {
System.out.println(ex.getMessage());
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
public static ArrayList<Student> getStudent(){
try{
FileInputStream fis = new FileInputStream("C:\\students.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
ArrayList<Student> students1 = (ArrayList<Student>) ois.readObject();
ois.close();
return students1;
} catch(ClassNotFoundException | IOException ex){
System.out.println(ex.getMessage());
return null;
}
}
public static void listStudent(ArrayList<Student> students){
System.out.println("View the Records in the Database:");
for(Student student: students){
System.out.println("Name: " + student.fname + " " + student.lname);
System.out.println("Course: " + student.course);
System.out.println("Section: " + student.section);
System.out.println();
}
}
static void writeToFile(Student student) throws FileNotFoundException, IOException{
String path = "C:\\students.ser";
FileOutputStream fos = new FileOutputStream(path, true);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(student);
oos.close();
System.out.println("New Record has been written!");
}
Когда я прочитал файл, вызвав getStudent()
и распечатать его на listStudent()
У меня есть только одна запись файла.
Пожалуйста, помогите! Очень ценю.
EDIT
Я пытался писать arraylist
в файл и читать его в arraylist
. Я покажу вам, как я это сделал. Во-первых, я пишу arraylist
в файл:
public static ArrayList<Student> students = new ArrayList<>();
public static void addStudent(){
Student student = new Student(fname, lname, course, section);
students.add(student);
System.out.println("Writing to file...");
try {
writeToFile(students);
}catch...
}
static void writeToFile(ArrayList<Student> students) throws FileNotFoundException, IOException{
String path = "C:\\students.ser";
FileOutputStream fos = new FileOutputStream(path, true);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(students);
oos.close();
System.out.println("New Record has been written!");
А потом я прочитал студент файл:
public static ArrayList<Student> getStudent(){
try{
FileInputStream fis = new FileInputStream("C:\\students.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
ArrayList<Student> students1 = (ArrayList<Student>) ois.readObject();
ois.close();
return students1;
} catch(ClassNotFoundException | IOException ex){
System.out.println(ex.getMessage());
return null;
}
}
Я могу видеть, что в файле у меня есть много объектов, как размер файла продолжает расти. Но я прочитал только один объект, который является моим самым первым объектом, который я написал в файл.
Возможно, вы только напишите одного учащегося в файл. Поэтому имеет смысл, что вы будете читать только один. –
Спасибо за ваш комментарий. Я заметил, что, однако, я добавил новый объект в старый файл, так что технически у меня есть куча объектов в моем файле. FileOutputStream fos = new FileOutputStream (путь, истина); – TomNg