java - Lesen mehrerer Objekte aus einer Datei, wie Sie waren, in ein array

Ich würde Sie gerne Fragen, wie die community, was denkst du über die folgende situation. Die Aufgabe ist das schreiben von Objekten in eine Datei. Was könnte gemacht werden, indem eine Liste von Objekten auf der Datei, die kann ich später Lesen, so habe ich meine Objekte wieder. Hier würde ich schreiben praktisch NUR EIN Objekt auf die Datei, nämlich der Liste (enthalten mehr Objekte).

Aber, die Aufgabe, die Nähte zu schreiben, eigene Objekte zu der Datei, die die Methode erhält eine Liste. Die Objekte können alles sein. (Sie müssen serialisierbar sein, natürlich)

Also ich habe:

public class TaskStream {
    public static void saveObjects(ArrayList<Object> al) {
        try {
            FileOutputStream fos = new FileOutputStream("outputFile", true);
            try {
                ObjectOutputStream oos = new ObjectOutputStream(fos);
                for (Object o : al){
                    try {
                        oos.writeObject(o);
                        System.out.println("saved");
                    } catch (NotSerializableException e) {
                        System.out.println("An object was not serializable, it has not been saved.");
                        e.printStackTrace();
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    }

Das funktioniert gut.

Aber jetzt, würde ich mag, Sie zu Lesen. Meine erste concept über, es wäre eine Art von Verfahren, das liest Objekte, bis die Datei-Objekte, und ich kann sparen Sie jede von Ihnen in einer Liste wieder (das ist die Aufgabe). So wie Pseudo-code:

for(Object o : fileToRead){ list.add(o) }

Wie wäre es möglich? Ich begann zu spielen, um mit der readObject-Methode der ObjectInputStream, aber es scheint, führen zu vielen Fehlern.

Haben Sie eine Idee? Oder was wäre die beste Praxis, indem Sie eine solche Aufgabe?


Dank!

Habe ich versucht, Ihre Idee. Die genaue Umsetzung:

public static ArrayList<Object> readObjects(){
    ArrayList<Object> al = new ArrayList<Object>();
    boolean cont = true;
        try {
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("outputFile"));
            while(cont){
                  Object obj=null;
                try {
                    obj = ois.readObject();
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
                  if(obj != null)
                     al.add(obj);
                  else
                     cont = false;
               }
        } catch (FileNotFoundException e) {
            //TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            //TODO Auto-generated catch block
            e.printStackTrace();
        }

return al;

}

Das Programm zu testen Schreibe ich zwei Objekte in der Datei.
Ich Lesen Sie die Objekte aus der Datei und fügen Sie Sie in einer Liste.
Ich Durchlaufen Sie diese Liste durch und drucken Sie den Inhalt.

Wenn ich das Programm starte passiert Folgendes (ich löschte die Ausgabedatei, so kann das Programm
neu erstellen und alles von vorne).

Ergebnis:

Die beiden Objekte aus der Liste wird erfolgreich bedruckt werden.
Aber ich bekomme dieses:

java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2598)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1318)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)    

...

Ich etwas nicht ändern, und ich das Programm erneut ausführen. Ergebnis:

Die beiden Objekte aus der Liste wird erfolgreich bedruckt werden.
Aber ich bekomme dieses:

java.io.StreamCorruptedException: invalid type code: AC
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1377)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)    

Nunmehr alle erneut bringt das gleiche Ergebnis.

Wenn ich wiederholen Sie den gesamten Prozess wieder von vorne (Start durch löschen der Ausgabedatei -) alles geschieht genau das gleiche (wie erwartet).

Haben Sie Ideen wie man es beheben? Vielen Dank für die Hilfe!

javapractices.com/topic/TopicAction.do?Id=57 interessant sein könnte
ja, ich habe auch schon gelesen, aber da schreibt er eine Liste auf die Datei. Normalerweise würde ich das gleiche tun, aber die Aufgabe ist zu schreiben, separate Objekte in der Datei...
Welche Fehler sind Sie immer ? Und können Sie nach dem code lieber als der pseudo-code, da es jetzt scheint, du machst es richtig ...
Hi Vlatkozelka und Mitch, bitte sehen Sie sich den post nochmal editiert, thx!!!
ok, also danke für die Idee mit dem boolean cont! Für diejenigen, die dieses problem auch, ich habe fangen die EOFException, dass ist ok dann, und ich gab die Idee an Datei Anhängen, so dass ich Sie gelöscht, das argument "true" durch das erstellen der Ausgabe. also werde ich tun: wenn ich möchte anfügen, zuerst lese ich alle Infos, setzen Sie es in eine Liste, fügen Sie die zusätzliche info auf der Liste, und schreiben Sie in die Datei, wenn jemand hat eine bessere Idee haben, bitte teilen, thx

InformationsquelleAutor user3435407 | 2014-12-10

Schreibe einen Kommentar