Vector in Datei schreiben

Status
Nicht offen für weitere Antworten.

duddel123

Aktives Mitglied
hi Leute,

ich sammle ständig logmessages in einem vector namens logs!
Durch
Code:
 Log.getlogs();
kann auf ihn zugegriefen werden.

per
Code:
public class WriteData {
	
	WriteData(){
		
	}

	 public static void write() throws FileNotFoundException, IOException{
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("c:\\log.txt"));
        out.writeObject(Log.getlogs());
        out.close();
       }
        


    
}

möchte ich nun den Inhalt einfach ausgeben!
Den Vector habe ich vorher initialisiert,daran kann es wohl nicht liegen!

Ihr noch der error code
Code:
java.io.NotSerializableException: DataLog.LogMessage
	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
	at java.io.ObjectOutputStream.writeArray(Unknown Source)
	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
	at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
	at java.io.ObjectOutputStream.defaultWriteObject(Unknown Source)
	at java.util.Vector.writeObject(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
	at java.io.ObjectOutputStream.writeObject(Unknown Source)
	at DataLog.WriteData.write(WriteData.java:13)
	at AMSFenster.actionPerformed(AMSFenster.java:93)
	at java.awt.Button.processActionEvent(Unknown Source)
	at java.awt.Button.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

hat jemand vielleicht eine kleine Idee!?!?

g duddel123
 
um ein objekt zu serialisieren muss es auch serialisierbar sein. spirch: deine klassen die du serialisieren willst müssen das interface Serializable implementieren.
 
mir stellt sich ja noch die Frage on man es überhaupt so machen muss!
braucht man denn unbedingt ein Objectdataoutputstream?
 
du könntest deinen log auch als plain text oder xml abspeichern. wie du es machst ist dir überlassen...
 
ein objectoutputstream hat den Vorteil, dass du das Objekt in einem andern Progi wieder holen kannst.
Wenn du das nicht benötigst würd ich einfach einen String in die Datei schreiben, und nicht das ganze Objekt
 
o.k. implements Serializable hat geholfen!
Aber, ich bin der Meinung das man das auch ohne Objekt handlen könnte!
Leider bin ich mit vectoren noch anfänger, ist es den überhaupt möglich den vector in einen String zu verwandeln?!??


danke bis hierhin
 
hi leute,

wie gesagt das mit dem interface hat geklappt,
allerdings bei der Ausgabe in die Datei, steht neben meinem text "DAS HIER HABE ICH IN DEN VECTOR GESCHRIEBEN" noch einiges anderes! Hängt das mit dem Objekt zusammen??


¬í sr java.util.VectorÙ—}[€;¯ I capacityIncrementI elementCount[ elementDatat [Ljava/lang/Object;xp ur [Ljava.lang.Object;�ÎXŸs)l xp
sr DataLog.LogMessage4Hi‹ÙÐUI L messaget Ljava/lang/String;L timeq ~ xpt +DAS HIER HABE ICH IN DEN VECTOR GESCHRIEBENt pppppppppx



g+d duddel123
 
bei der serialisierung werden alle felder deines objekts und des Vectors (die nicht als transient deklariert wurden) in die datei geschrieben, inlkusive ein bisschen overhead.
 
was würdest du nun vorschlagen?

von dem serialisieren abstand nehmen und den vector in einen string konvertieren?
 
einen vektor in einen string konvertieren geht erstmal nicht 😉
was wilslt du denn machen? willst du den log als normalen text abspeichern? dann musst du dir alle elemente aus deinem vector holen und einzlen jeden log eintrag per (Buffered)FileWriter in eine datei schrieben.
ansonsten ist noch xml zu empfehlen, aber das isn stück länger das zu machen, dafür wiederverwendbarer...
 
Roar hat gesagt.:
willst du den log als normalen text abspeichern? dann musst du dir alle elemente aus deinem vector holen und einzlen jeden log eintrag per (Buffered)FileWriter in eine datei schrieben.
.

ja ich möchte nur normalen text speichern und dann auslesen! XML wäre wohl "mit Kanonen auf Spatzen" :wink:

Ich habe eben nach vector auslesen hier gesucht aber nix gefunden, hat du vielleicht noch zum SChluss nen Link dafür!

Dann gebe ich auch wieder ruhe :lol:
 
Vector#size() und get(int index) und eine for schleife. das soltle weiterhelfen 😉
 
sorry bins doch noch mal,

gesagt getan
Code:
	 public static void write() throws FileNotFoundException, IOException{
	 BufferedWriter out = new BufferedWriter(new FileWriter("c:\\log.txt"));		
	 	for(int i=0; i<=Log.logs.size();i++){
	 		out.write((char[]) Log.logs.get(i));	 	

	 	}
        out.close();
	 
        

}
gibt leider doch noch das hier aus!

Code:
java.lang.ClassCastException
	at DataLog.WriteData.write(WriteData.java:25)
	at AMSFenster.actionPerformed(AMSFenster.java:93)
	at java.awt.Button.processActionEvent(Unknown Source)
	at java.awt.Button.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Falscher Ansatz?
 
dotlens hat gesagt.:
was gibst du mit der get() methode zurück?

ööh ich hoffe das Element an der Stelle des Indexes(i), nicht??
Code:
 out.write((char[]) Log.logs.elementAt(i));

bringt den gleichen Fehler!
 
get liefert dir doch eine instanz einer LogMessage zurück!? das kannst du nicht einfach in einen char[]casten weil eine LogMessage kein char array ist sondern ein objekt. caste das objekt in eine LogMessage (oder wie dein objekt heißt was du dadrin gespeichert hast) und wenn du deine LogMessage hast, dann bau da eine getter methode ein die dir den text zurück gibt.
 
Zeile 5:
Code:
 String s = (String) Log.logs.get(i); // s sollte besser noch vor der Schleife definiert werden.
 out.write(s,0,s.length());
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben