Skip to main content

Serialisieren von Objekten nach XML in Java

Das Serialisieren von Objekten in Java und gleichzeitigem Abspeichern ist sehr einfach.

Folgende zwei Methoden werden für das Laden und Speichern benötigt.

Speichern

/**
* @param fileName
* @param obj
*/
public void SerializeObjectToFile(
    final String fileName, final Object obj)
{
    if (StringUtil.IsNullOrEmpty(fileName) ||
        (obj == null)) { return; }
 
    DeleteFile(new File(fileName));
 
    XMLEncoder encoder = null;
 
    try
    {
        encoder = new XMLEncoder(new BufferedOutputStream(new FileOutputStream(fileName)));
 
        encoder.writeObject(obj);
    }
    catch (final FileNotFoundException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    finally
    {
        encoder.close();
    }
}
 
/**
* @param file
*/
private void DeleteFile(
    final File file)
{
    if (Filesystem.exists(file))
    {
        Filesystem.DeleteFile(file);
    }
}


Öffnen

Die Besonderheit beim Öffnen ist und darauf muss vorher geachtet werden, das zu ladende Objekt wird zwar als Object zurück gegeben, danach muss aber zusätzlich eine Konvertierung in das entsprechende Objekt vorgenommen werden.

/**
* @param fileName
* @return
*/
public Object DeserializeFromFile(
    final String fileName)
{
    if (!Filesystem.exists(new File(fileName))) { return null; }
 
    XMLDecoder decoder = null;
 
    try
    {
        decoder = new XMLDecoder(new BufferedInputStream(new FileInputStream(fileName)));
        return decoder.readObject();
    }
    catch (final FileNotFoundException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    finally
    {
        decoder.close();
    }
 
    return null;
}

Beispiel

Settings Klasse

Wir wollen einen Wert in einer Settings-Klasse als XML in eine Datei speichern.

  • Dafür wird in der Klasse eine private Methode angelegt
  • Die Setter- und Getter-Methode bewirkt, dass der XMLEncoder die entsprechende Werte auslesen und in die Datei schreiben kann
  • Der XMLDecoder benötigt diese Methoden, damit er die Werte in die korrekte Variable schreiben kann
public class Settings
{
 
  private String serverName;
 
 
  /**
 * @param serverName
 * the serverName to set
 */
  public void setServerName(
    final String serverName)
  {
    this.serverName = serverName;
  }
 
  /**
 * @return the serverName
 */
  public String getServerName()
  {
    return serverName;
  }
 
}

Serialisierungsvorgang

Laden

final Object obj = DeserializeFromFile(String fileName);
 
if ((obj != null) &&
    (obj instanceof Settings))
{
    Settings vari = (Settings) obj;
}


Speichern

Settings settings = new Settings();
settings.setServerName("localhost");
 
SerializeObjectToFile(String fileName, Settings settings);


Ausgabe

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0_18" class="java.beans.XMLDecoder">
 <object class="de.msging.helper.settings.LocalSettings">
  <void property="serverName">
   <string>localhost</string>
  </void>
 </object>
</java>