Java Eine einfache Frage zum speichern von Objekten in Dateien

Timdaroxxa

Lieutenant
Registriert
März 2009
Beiträge
954
Hi,

ich soll mehrere Objekt aus einer Liste in einer Datei speicher und auch wieder auslesen und als Liste von Objekten zurückgeben:

Code:
public static void writeFile(List<java.lang.Object> list, String fileName)  {
		for(java.lang.Object item: list) {
			try {
				FileOutputStream f = new FileOutputStream(fileName, true);
		        ObjectOutputStream out = new ObjectOutputStream(f);
		        out.writeObject(item);
		        out.close();
			}
			catch(IOException e) {
				System.out.print(e.getMessage());
				e.printStackTrace();
			}
		}
    }

Code:
public static List<java.lang.Object> readFile(String fileName){
    	List<java.lang.Object> list = new LinkedList<java.lang.Object>();
    	System.out.println("Start try");
    	try {
	        ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName));
	    	while(in.readObject() != null) {
	    		java.lang.Object item =  in.readObject();
	    		list.add(item);
	    		System.out.println(item);
	    	}
	        in.close();
    	}
    	catch(IOException e) {
    	}
    	catch(ClassNotFoundException e) {	
    	}
    	
    	return list;
    }

Das war bisher mein Ansatz, ist aber irgendwie falsch ^^

Könnt ihr mir sagen, wie man sowas macht oder auf die passende Website verlinken?

Danke :D

Gruß Tim
 
Zum einen findest du unter folgender Seite ein paar Informationen zu diesem Thema:
http://home-1.worldonline.nl/~bmc88/java/sbook/041.html

Des weiteren hast du das Problem, dass du zum einen eine List von Objekten weg schreibst auf der anderen Seite willst du aber jedes Element aus dieser Liste einzeln aus der Datei auslesen.

Heißt:
Du schreibst eine List<Object> weg und musst auch wieder eine List<Object> einlesen und nicht Object1, Object2 etc
 
Zuletzt bearbeitet:
Danke schonmal.
Ich schreibe doch alle einzelnen Elemente der Liste und nicht die Liste durch die for-Schleife oder sehe ich das falsch?
EDIT: Ich komme immer noch nicht dahinter wie ich meine Datei statt "zeilenweise" "objektweise" auslese ;(
 
Zuletzt bearbeitet:
Ich würde mal "irgendwie falsch" als NullPointerException oder "ich bekomme nicht alle Objekte" interpretieren. Das Problem liegt in Zeile 6 und 7 der auslesenden Methode.
Und musst du wirklich für jedes zu schreibende Objekt die Datei öffnen und schließen?
 
Habe mich da gestern wohl verlesen.
Zum einen Reicht es wenn du außerhalb der Schleife einen Stream deklarierst und ihn innerhalb der Schleife nurnoch verwendest. So sparst du entsprechende Performance.

Des Weiteren solltest du Fehlermeldung auch entsprechend behandeln:
Code:
try {
  // Mach dies und jedes
  // Fehler tritt auf in Form einer Exception
} catch(IOException e) {
  // Entsprechende Fehler behandeln und eine Fehlermeldung ausgeben
} catch(ClassNotFoundException e) {
  // Entsprechende Fehler behandeln und eine Fehlermeldung ausgeben
}
 
Timdaroxxa schrieb:
ich soll mehrere Objekt aus einer Liste in einer Datei speicher und auch wieder auslesen und als Liste von Objekten zurückgeben:

Code:
public static void writeFile(List<java.lang.Object> list, String fileName)  {
		for(java.lang.Object item: list) {
			try {
				FileOutputStream f = new FileOutputStream(fileName, true);
		        ObjectOutputStream out = new ObjectOutputStream(f);
		        out.writeObject(item);
		        out.close();
			}
			catch(IOException e) {
				System.out.print(e.getMessage());
				e.printStackTrace();
			}
		}
    }

Das war bisher mein Ansatz, ist aber irgendwie falsch

Wenn Du die Datei für jedes Objekt überschreibst, hast Du am Ende lediglich ein Objekt in der Datei!
 
@Bauergiesen
Dieser Ansatz funktioniert im Zusammenhang mit ObjectOutputStream aber nicht, da die Metadaten sonst durcheinander kommen. Es muss zwingend eine Datei geöffnet werden. Das wäre aber ohnehin der empfehlenswerte Ansatz.

Bei der Methode zum Lesen gibt es aber auch einen Fehler...
 

Ähnliche Themen

Antworten
2
Aufrufe
1.049
Zurück
Oben