Objekte in Textdatei weiterschreiben

Status
Nicht offen für weitere Antworten.

auxilium

Mitglied
Hi,

ich habe mehrere objekte, die ich in einer Textdatei speichern möchte.

habe gesehen, dass das funktioniert, wenn man die objekte seriezable macht.

Nun habe ich nur das Problem, das er mir jedes Mal nur ein Objekt in der Datei speichert und beim nächsten Methodenaufruf dieses Objekt überschreibt.

Meine Methode:

Code:
	public static void speichern(String file, Object object) {
		try {
			ObjectOutputStream oos = new ObjectOutputStream(
					new FileOutputStream(file));
			oos.writeUnshared(o);
			oos.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
 
eine Datei mit Serializable-Objekten ist ein höheres Gesamtkonstrukt mit bestimmten Java-Markierungen,
z.B.
Start-erstesObjekt-Trenner-zweitesObjekt-Ende

daher kannst du die Datei weder mit Java-Mitteln noch manuell bearbeiten,
soweit ich weiß,
ein append ist für eine Serializable-Datei nicht vorgesehen

-> immer neue Datei schreiben, notfalls die alten Objekte vorher auslesen und wieder mit hineinschreiben
 
Du öffnest den Stream, schreibst rein, und schliest ihn wieder. Damit kannst Du nicht appenden. Wenn Du den Stream immer wieder öffnen musst und dann appenden willst, dann solltest Du einen RandomAccessStream verwenden und vor dem ersten Schreiben einen SEEK an das Ende der Datei machen.

Wenn der ObjectStream das nicht mag, kannst Du den vorher in einen ByteArrayOutputstream schreiben lassen - dann kannst Du die Bytes nachträglich selbst wegschreiben.
 
> Wenn Du den Stream immer wieder öffnen musst und dann appenden willst, dann solltest Du einen RandomAccessStream verwenden

allgemein bei Text geht das schon, einfach Parameter append = true im Konstruktor,

der ObjectOutputStream kann das grundsätzlich auch, man muss da nicht künzeln,
nur wird der ObjectInputStream das nicht mehr korrekt einlesen können,
es sein denn du baust zufällig genau die richtigen Bytes zusammen, die der ObjectOutputStream schreiben würde,
wenn du soweit bist, dann brauchst du aber Object In/ Out nicht mehr 😉
 
genauso was hab ich auch gesucht,

aber mit der obigen methode kann man ja jeweils nur ein objekt erstellen, pro aufruf, wie mache ich das in einem schritt mehrere objekte beispielsweise aus einer arraylist gespeichert werden?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben