Java - Wie zu Lesen-Datei in ArrayList von Objekten?
Ich will eine ArrayList
Student und speichern in eine Datei zur späteren Verwendung. Ich erfolgreich, schrieb es aber, wenn ich es lese zurück zu ArrayList
habe ich nur ein Objekt.
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!");
}
Wenn ich Lesen der Datei durch den Aufruf getStudent()
und drucken Sie es aus, indem listStudent()
ich habe nur einen Datensatz der Datei.
Bitte helfen Sie mir!
Viel zu schätzen.
BEARBEITEN
Hatte ich versucht, das schreiben einer arraylist
an-Datei und Lesen Sie es in arraylist
. Ich werde Ihnen zeigen, wie ich das geschafft habe.
Erstens, ich Schreibe arraylist
Datei:
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!");
Und dann lese ich student Datei:
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;
}
}
Kann ich sehen, dass in der Datei habe ich viele Objekte, wie die Dateigröße weiter zu wachsen. Aber ich nur ein Objekt, nachdem es gelesen, das ist mein erstes Objekt, schrieb ich an die Datei.
Vielen Dank für Ihren Kommentar. Ich bemerkte, dass, aber ich angehängt, das neue Objekt der alten Datei, also technisch habe ich paar Objekte meiner Datei. FileOutputStream fos = new FileOutputStream(path, true);
InformationsquelleAutor TomNg | 2013-11-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stand im Kommentar:
Während dies technisch nicht Anhängen, um die Datei zu Ende, und die großen Werke mit text-Dateien, ich glaube nicht wirklich, dass dies funktionieren wird oder arbeiten gut mit der Serialisierung. Ich würde vermuten, dass, zum Anhängen mit Serialisierung, würden Sie zuerst Lesen müssen, um alle Objekte aus der Datei und schreiben Sie dann ohne Anhängen über die Serialisierungs-Mechanismus. Ich möchte zu re-schreiben Sie Ihren input-und output-code, wenn ich du wäre.
Bearbeiten
Ich fürchte, du hast zu viel unterschiedlichen Sachen, zusammengepfercht in einer einzigen Klasse, was für eine chaotisch und schwer zu Debuggen Programm. Einige Allgemeine Empfehlungen zu helfen, clean up diese Zuordnung:
public String toString()
Methode gibt einen String zurück, hält die Werte der Objekt-Felder.ArrayList<Student>
Feld, sagen, genannt Studierenden.addStudent(Student student)
Methode, die es ermöglicht außerhalb von Klassen hinzufügen Student-Objekte zu dieser Klasse.public String toString()
Methode gibt die Liste die toString(), d.h.,return students.toString();
.public void readFromFile(File file)
Methode, um mit der Serialisierung zu LesenArrayList<Student>
aus einer Datei.public void writeToFile(File file)
Methode, um mit der Serialisierung zu schreibenArrayList<Student>
zu einer Datei.addStudent(...)
Methode.writeToFile(...)
vorbei in Ihre Datei.Beispielsweise die main-Methode könnte das fast so aussieht wie der code unten. Beachten Sie aber, dass in meinem test-Fall zu beweisen, dass das funktioniert, habe ich mir eine vereinfachte Student-Klasse, eine, die dauerte nur 2 Parameter für den ersten und letzten Namen. Ihr code wird offensichtlich mehr Parameter.
aktualisieren Sie Ihre Frage-zeigen Sie Ihre neuesten versuche, das Lesen und schreiben, und Ihre aktuellen Probleme mit diesem code. Bitte nicht den code ändern und text in der ursprünglichen Frage als, ungültig machen würden die meisten unserer aktuellen Antworten, aber stattdessen fügen Sie eine Ergänzung zu der Unterseite Ihres vorhandenen Fragen, und dann Benachrichtigen Sie uns, die beantwortet oder kommentiert Sie, als Sie erneut gebeten, Ihre Frage.
Vielen Dank für Ihren Vorschlag. Ich habe soeben meine Frage.
siehe edit zu beantworten. Beachten Sie, dass, wenn alle meine Empfehlungen gehen gegen Ihre Zuordnung Anweisungen, dann postet bitte alle die Anweisungen, wie ein edit zu deiner Frage.
Vielen Dank für Ihre sehr detaillierte Anweisungen. Es scheinen jetzt arbeiten. Ich denke, ich sollte verschiedene Dinge auseinander.
InformationsquelleAutor Hovercraft Full Of Eels
Ich schlage vor, Sie aktualisieren Sie Ihre Serialisierung-code für Ihre Schüler der Klasse (weil Sie nicht Serialisieren Sie Ihre statische
students
) wie folgt -InformationsquelleAutor Elliott Frisch
Schreiben Sie einen single-Student-Objekt:
Aber versuchen, eine ArrayList:
InformationsquelleAutor user3001267