![]() |
|
|
8.3.2 Einträge einfügen, auslesen und löschen
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
abstract class java.util.prefs. Preferences |
| abstract void put( String key, String value ) abstract void putBoolean( String key, boolean value ) abstract void putByteArray( String key, byte[] value ) abstract void putDouble( String key, double value ) abstract void putFloat( String key, float value ) abstract void putInt( String key, int value ) abstract void putLong( String key, long value ) |
| Bildet eine Assoziation zwischen den Schlüsselnamen und dem Wert. Die Varianten mit den speziellen Datentypen nehmen intern eine einfache String-Umwandlung vor und sicht nur kleine Hilfsfunktionen und so steht in putDouble() nur put(key, Double.toString(value)). putByteArray() konvertiert die Daten nach der Base64-Kodierung. |
| abstract String get( String key, String def ) abstract boolean getBoolean( String key, boolean def ) abstract byte[] getByteArray( String key, byte def[] ) abstract double getDouble( String key, double def ) abstract float getFloat( String key, float def ) abstract int getInt( String key, int def ) abstract long getLong( String key, long def ) |
| Liefert den gespeicherten Wert typgerecht aus. Fehlerhafte Konvertierungen werden etwa mit einer NumberFormatException bestraft. Der zweite Parameter erlaubt die Angabe eines Alternativwerts, falls es keinen assoziierten Wert zu dem Schlüssel gibt. | |
| abstract String[] keys() Liefert alle Knoten unter der Wurzel, dem ein Wert zugewiesen wurde. Falls der Knoten keine Eigenschaften hat, liefert keys() ein leeres Feld. |
Unser folgendes Programm richtet einen neuen Knoten unter /com/javatutor/insel ein. Aus den über System.getProperties() ausgelesenen System-Eigenschaften sollen alle Eigenschaften die mit »user.« beginnen, in die Registry übernommen werden.
Listing 8.5 PropertiesInRegistry.java
import java.io.ByteArrayOutputStream; import java.util.Enumeration; import java.util.prefs.*; public class PropertiesInRegistry { static Preferences prefs = Preferences.userRoot().node( "/com/javatutor/insel" ); static void fillRegistry() { for ( Enumeration e = System.getProperties().propertyNames(); e.hasMoreElements(); ) { String key = (String) e.nextElement(); if ( key.startsWith("user.") ) prefs.put( key, System.getProperty(key) ); } }
Um die Elemente auszulesen, kann ein bestimmtes Elemente mit getXXX() erfragt werden. Die Ausgabe aller Elemente unter einem Knoten gelingt am Besten mit keys(). Das Auslesen kann eine BackingStoreException auslösen, falls der Zugriff auf den Knoten nicht möglich ist. Mit get() erfragen wir anschließend den mit den Schlüssel assoziierten Wert. Wir geben »---« aus, falls der Schlüssel keinen assoziierten Wert besitzt.
static void display() { try { String keys[] = prefs.keys(); for ( int i = 0; i < keys.length; i++ ) System.out.println( keys[i] + ": " + prefs.get(keys[i], "---") ); } catch ( BackingStoreException e ) { System.err.println( "Knoten können nicht ausgelesen werden: " + e ); } }
| Hinweis Die Größe der Schlüssel und Werte sind beschränkt! Der Knoten- und Schlüsselname darf maximal Preferences.MAX_NAME_LENGTH/MAX_KEY_LENGTH Zeichen umfassen und die Werte dürfen nicht größer als MAX_VALUE_LENGTH sein. Die aktuelle Definition der Konstanten gibt 80 Zeichen und 8KB an. |
Um Einträge wieder loszuwerden, gibt es drei Methoden: clear(), remove() und removeNode(). Die Namen sprechen für sich.
Die Daten aus den Preferences lassen sich mit exportNode(OutputStream) beziehungsweise exportSubtree(OutputStream) im UTF-8 kodierten XML-Format in einen Ausgabestrom schreiben. exportNode(OutputStream) speichert nur einen Knoten und exportSubtree(OutputStream) den Knoten inklusive seiner Kinder. Und auch der umgekehrte Weg funktioniert: importPreferences(InputStream) importiert Teile in die Registrierung. Die Schreib- und Lesefunktionen lösten eine IOException bei Fehlern aus und eine InvalidPreferencesFormatException ist beim Lesen möglich, wenn die XML-Daten ein falsches Format haben.
Änderungen lassen sich mit Listernern verfolgen. Der NodeChangeListener reagiert auf Einfüge- und Löschoperationen von Knoten und der PreferenceChangeListener informiert bei Wertänderungen.
1 Die Systemeigenschaften landen unter /etc/.java/.systemPrefs und die Benutzereigenschaften lokal unter $HOME/.java/.userPrefs.
| << zurück |
Copyright © Galileo Press GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.