14.4.4 | Austausch von Einstellungen |
Um Portabilität der Einstellungen zwischen verschiedenen Plattformen zu gewährleisten, wird ein XML-basierter Import/Export-Mechanismus zur Verfügung gestellt. Hierzu definiert die Klasse Preferences folgende Methoden:Für den Export muss man lediglich ein Preferences-Exemplar ermitteln und die Methode exportNode() bzw. exportSubtree() aufrufen. In folgenden Zeilen werden z. B. alle Java-Einstellungen des aktuellen Benutzers in die Datei /tmp/user.prefs exportiert:
- exportNode(OutputStream)
Schreibt die Einstellungen des aktuellen Knotens in den übergebenen Stream.- exportSubtree(OutputStream)
Schreibt die Einstellungen des aktuellen und aller untergeordnerter Knoten in den übergebenen Stream.- static importPreferences(InputStream)
Liest Einstellungen aus dem übergebenen Stream und legt sie über den lokalen Persistenz-Mechanismus ab.Preferences prefs = Preferences.userRoot(); FileOutputStream out = new FileOutputStream("/tmp/user.prefs"); prefs.exportSubtree(out); out.close();Einstellungen können anschließend über die als static deklarierte Methode importPreferences() wieder auf einer anderen Plattform eingelesen werden:FileInputStream in = new FileInputStream("/tmp/user.prefs"); Preferences.importPreferences(in); in.close();Da die Einstellungen in der Export-Datei immer mit ihrem absoluten Pfad zum Wurzelknoten angegeben werden, muss man beim Importieren nicht zunächst den Knoten ermitteln, dem die Einstellungen hinzugefügt werden sollen. Auch ist dort abgelegt, ob es sich bei den Einstellungen um System- oder Benutzereinstellungen handelt. Statt dessen kann der Import direkt über eine als static deklarierte Methode durchgeführt werden.
Exportierte Einstellungen werden in XML entsprechend folgender DTD gespeichert:<?xml version="1.0" encoding="UTF-8"?> <!-- Das Start-Element --> <!ELEMENT preferences (root)> <!-- Optionale Version der DTD --> <!ATTLIST preferences EXTERNAL_XML_VERSION CDATA "0.0" > <!-- Wurzel-Knoten enthält Einstellungen und weitere Knoten --> <!ELEMENT root (map, node*) > <!-- Gibt an, ob Benutzer- oder System-Einstellungen --> <!ATTLIST root type (system|user) #REQUIRED > <!-- Jeder Knoten hat Einstellungen und weiter Knoten --> <!ELEMENT node (map, node*) > <!-- Name des Knotens --> <!ATTLIST node name CDATA #REQUIRED ><!-- Speicherung von Einstellungen (Schlüssel-Wert-Paare) --> <!ELEMENT map (entry*) > <!-- Ein Eintrag ist ein Schlüssel-Wert-Paar --> <!ELEMENT entry EMPTY > <!ATTLIST entry key CDATA #REQUIRED value CDATA #REQUIRED >Folgendes Beispiel zeigt die exportierten Einstellungen aus dem vorletzten Abschnitt:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE preferences SYSTEM 'http://java.sun.com/dtd/preferences.dtd'> <preferences EXTERNAL_XML_VERSION="1.0"> <root type="user"> <map /> <node name="de"> <map /> <node name="dpunkt"> <map /> <node name="runtime"> <map /> <node name="prefs"> <map> <entry key="width" value="622" /> <entry key="height" value="502" /> <entry key="font-name" value="Arial" /> <entry key="font-size" value="10" /> <entry key="xpos" value="105" /> <entry key="ypos" value="34" /> </map> </node> </node> </node> </node> </root> </preferences>In einigen Fällen kann auch ein manuelles Erstellen von Einstellungen im XML-Format sinnvoll sein. Einstellungen können in diesem Format vorkonfiguriert mit der Anwendung ausgeliefert werden. Bei der Installation werden Sie importiert und können danach vom Anwender z. B. nachbearbeitet werden.