Objekte via XML speichern und wieder einlesen

Status
Nicht offen für weitere Antworten.

nils_eckert

Neues Mitglied
Hallo zusammen!

Ich bin gerade auf der Suche nach einem Weg Objecte eines Programms möglichst einfach in eine XML Datei umzuwandeln und zu speichern und dann beim Programm-Neustart wieder einzulesen.

Was gibt es da für Möglichkeiten und wo liegen die Vor und Nachteile?

Ich habe bisher ObjectInputStream und OutputStream verwendet, aber wenn man dann mal eine Variable zu einem Objekt hinzufügen will, geht gar nüscht mehr.

Vielen Dank schon mal!
Nils
 

L-ectron-X

Gesperrter Benutzer
Ja, das ist korrekt. Ab Java 1.5 kann man eine Klasse die das Interface Serializable implementiert ohne gleich folgenden Code erst gar nicht mehr kompilieren.
Damit das von Dir beschriebene nicht (mehr) passiert, musst Du in die zu serialisierende Klasse ein spezielles Datenfeld einfügen.
Code:
private static final long serialVersionUID = -5617671899626507127L;
Damit wird die Serialisierungskompatibilität sicher gestellt. (Wert des long frei wählbar)

Bestehende Klassen, ohne dieses Datenfeld können auf ihre serialVersionUID hin untersucht werden, damit man ihnen nachträglich die Funktionstüchtigkeit zurück geben kann.
Dazu bringt das JDK bereits ein Tool mit GUI mit, welches das ermöglicht.
Eingabe an der Eingabeaufforderung unter Windows: serialver -show

Weitere Informationen kannst Du hier nach lesen.
 

foobar

Top Contributor
Wenn du Objekte mit Hilfe von XML serialisieren willst, ist am einfachsten die Klassen XMlEncoder und XMLDecoder zu benutzen. Falls du die XML Daten auch noch andersweitig verwenden willst, solltest du die Daten mit DOM/JDOM einlesen und speichern. Die Verarbeitung mit DOM/JDOM ist zwar etwas aufwändiger, dafür hast du aber auch die volle Kontrolle darüber, wie der XMLdatenstrom aufgebaut ist. Hier ein kleines Beispiel für XMLEncoder /XMLDecoder:
Code:
import java.beans.*;
import java.beans.XMLEncoder;
import java.io.*;
import java.util.Vector;
public class XmlEncoderDecoderDemo
{
	private FileOutputStream fos;
	private FileInputStream fis;
	public XmlEncoderDecoderDemo(String fileName)
	{
		try
		{
			fos = new FileOutputStream(fileName);
			fis = new FileInputStream( fileName );
		}
		catch (FileNotFoundException e)
		{
			e.printStackTrace();
		}
	}

	public Object read()
	{
		XMLDecoder decoder = new XMLDecoder( this.fis);
		Object out = decoder.readObject();
		return out;
	}

	public void write(Object data)
	{
		BufferedOutputStream bos = new BufferedOutputStream( fos );
		XMLEncoder encoder = new XMLEncoder(bos);
		encoder.writeObject( data );
		encoder.close();
	}

	public static void main(String[] args)
	{
		XmlEncoderDecoderDemo encoder =new XmlEncoderDecoderDemo("/home/steffen/meinVector.xml");
		
		Vector v = new Vector();
		v.add("aaa");
		v.add("bbb");
		encoder.write( v );
		
		//#########################
		
		Vector out = (Vector) encoder.read();
		System.out.println(out.firstElement());
		System.out.println("ok");
	}

}
Ein Beispiel mit DOM: http://www.java-forum.org/de/viewtopic.php?t=8325&highlight=xml
 
G

Guest

Gast
Wenn ich eine Objektliste bestehend aus mehrern Objekten mit folgenden Inhalten habe

Datum(String) , Geldwert (double) und Ausgabenart(String)

Diese werden in einer XML-Datei gespeichert wie oben beschrieben.

Wie kann ich nun auf die Objekte, bzw die Zahlenwerte zugreifen ?
Ich müsste alle Geldwerte der XML summieren können
 

vogella

Bekanntes Mitglied
Hallo,

Du könntest Eclipse EMF verwenden, dann kannst Du Dein Model sehr einfach per XML speichern und wieder einlesen.

Tutorial: EMF Tutorial

Viele Grüße, Lars
 

Wildcard

Top Contributor
Auch wenn ich großer EMF Fan bin, ist es für eine Model Driven Architecture wohl zu spät wenn das Modell schon da ist.
 

vogella

Bekanntes Mitglied
Moin Wildcard,

findest Du? Ich habe gerade ein existierendes Projekt von POJO auf ein EMF Modell umgestellt und fand das relativ schmerzfrei....

Viele Grüße, Lars
 

Wildcard

Top Contributor
vogella hat gesagt.:
findest Du? Ich habe gerade ein existierendes Projekt von POJO auf ein EMF Modell umgestellt und fand das relativ schmerzfrei....
Wenn man POJOs mit reinen Geschäftsdaten hat und entsprechende Interfaces definiert hat, geht das auch relativ einfach und IMO mit einem sehr großem Mehrwert.
Aber wenn man seine ersten Schritte in die Java-XML Welt macht, vermute ich das
a) man von EMF etwas erschlagen werden könnte (alleine schon durch Runtime Compatibility Jars)
b) kein sehr sauberes Datenmodell hat (keine echte MVC Trennung und so weiter) und am Ende einen Großteil der Anwendung neu schreibt

Einen Blick sollte nils_eckert aber spätestens im Hinblick auf sein nächstes Projekt riskieren, denn EMF ist Gold wert.
 
G

Guest

Gast
Mein Java Outputcode:

Code:
public static void foodcosts() throws FileNotFoundException, IOException {
      Costs food;
      food = new Costs();
      List<Costs> foodList = new ArrayList<Costs>(); 
XMLEncoder output = new XMLEncoder(new BufferedOutputStream(
            new FileOutputStream("foodCosts.xml")));
      output.writeObject(foodList);
      output.close();[/quote]


So sieht dann die *.XML Datei aus:

Code:
 <?xml version="1.0" encoding="UTF-8" ?>
- <java version="1.6.0_03" class="java.beans.XMLDecoder">
- <object class="java.util.ArrayList">
- <void method="add">
- <object class="Costs">
- <void property="date">
  <string>01.01.2008</string>      --->Datum
  </void>
- <void property="höhe">
  <double>43.0</double>            ---->Höhe, mit der nach dem einlesen weitergerechnet werden soll
  </void>
- <void property="name">
  <string>schweinebraten</string>
  </void>
  </object>
  </void>
  </object>
  </java>


Diese Liste geht dann natürlich noch weiter...

Wie kann ich dann aus dieser längeren xml Liste die Double Werte rausfischen und addieren und anzeigen?
Danke
 
G

Guest

Gast
Und wie kann ich jetz damit genau die Double Attribute oder Werte auslesen und mit Ihnen arbeiten?
Mir wird das nicht klar
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Rest Api und komplexe Objekte XML & JSON 3
S Muss ich bei JAXB immer noch eine zusaetzliche List-Wrapper Klasse erstellen wenn ich mehrere Objekte serialisieren will..? XML & JSON 1
MiMa Kann man Objekte in den ContentHandler übergeben? XML & JSON 7
JBoby Yaml File lesen und in Objekte umwandel (SnakeYAML / YamlBeans) XML & JSON 0
B JAXB Unmarshalling mehrerer Objekte XML & JSON 2
H Liste voller Objekte und Werte in XML via XStream XML & JSON 3
ARadauer Aus XML Datei Objekte erstellen... XML & JSON 3
R XML Objekte entschlüsseln. XML & JSON 3
G GUI-Objekte anhand XML-Information XML & JSON 3
S objekte in xml datei packen (JAXB) XML & JSON 5
G JAXB Objekte erzeugen XML & JSON 3
G XML Struktur in Objekte abbilden XML & JSON 3
I ID von Referenz speichern, nicht ganzes Objekt XML & JSON 1
S XML Datei speichern nicht möglich XML & JSON 13
B Xml speichern - müssen alle Klassen deklariert werden? XML & JSON 12
M Layout + Inhalt einer JTable speichern XML & JSON 30
I Liste in YAML Datei speichern und wieder auslesen XML & JSON 1
E JTreedaten in eine XML Datei speichern XML & JSON 3
T Pfad in einer Variablen speichern XML & JSON 1
T Formulardaten in XML Datei speichern XML & JSON 5
E ResultSet als XML Datei speichern XML & JSON 7
R sax, stax, jdom, jaxb? List von Objekten speichern und laden XML & JSON 6
A XML datei lesbar speichern (eingerückt) XML & JSON 7
B XML file erstellen und in lesbarer form speichern XML & JSON 2
R XLM Datei lesen Ändern (kompliziertes Search and Replace) und Speichern XML & JSON 12
T Daten in Xml speichern XML & JSON 4
T Daten aus Programm in XML Datei speichern XML & JSON 2
M RSS als String speichern XML & JSON 12
F XML mit DOM einlesen- Teile in Arraylist speichern XML & JSON 4
T RSS-Feed parsen und in Datenbank speichern XML & JSON 6
P Variablen in XML speichern XML & JSON 3
L XML Daten auslesen und in Tabelle (Array) speichern XML & JSON 1
M Arraylist als xml speichern/ laden XML & JSON 2
J Logdaten als XML speichern und lesen XML & JSON 2
T Wie einen String(XML Inhalt) in eine XML Datei speichern? XML & JSON 8
J Tabelleninhalte in XML- speichern und laden XML & JSON 5
J File objekt in xml speichern? XML & JSON 12
X XML File auslesen/parsen u. in ne Hashmap speichern XML & JSON 2
P XML Dateien zusammenführen und in eine XML speichern XML & JSON 7
M Speichern größerer Datenmengen // XML vs. Serializing . XML & JSON 5
D Mit Sax Inhalt zwischen Tags in Vector speichern XML & JSON 4
M XML Encoder Objekt speichern, obwohl BufferedImage im Objekt XML & JSON 3
A Jetzt mal im Klartext. XML speichern XML & JSON 2
G Newbe - Frage.XML - Datei einlesen und speichern XML & JSON 2
S DefaultMutableTreeNodes als String in Textdatei speichern XML & JSON 7
A Internetinhalte auslesen und in einem XML-File speichern XML & JSON 4
C XML speichern XML & JSON 7
M Speichern von "Tags" in XML XML & JSON 2
R Daten aus xml lesen und in Strings speichern XML & JSON 4
N speichern von XML-Datei in DOM XML & JSON 6
H soap message in java klasse speichern XML & JSON 10
B XML öffnen, bearbeiten, speichern ohne JDOM XML & JSON 4
P Gegenstück zum Speichern in der XML Datei - Das Laden XML & JSON 4
Avalon JSON flatten und wieder in DTO konvertieren XML & JSON 21
R XML eingelesen und wieder geschrieben... Fehler XML & JSON 7
F XML erzeugen aus JTree und wieder einlesen... XML & JSON 6
D JTree aus XML Datei erstellen & JTree wieder in XML spei XML & JSON 4
S Mal wieder Sax was sonst ;( XML & JSON 5
S Geändertes XML-File wieder abspeichern. XML & JSON 10
P XML - mal wieder. XML & JSON 10

Ähnliche Java Themen

Neue Themen


Oben