# In Preferences speichern



## MichaelR (15. Dez 2009)

Hallo zusammen,

ich hab folgendes Problem. Ich möchte ein paar kleine Einstellungen in den Preferences speichern und steh noch ganz am Anfang.
Ich habe momentan folgenden Quellcode

```
public static void main(String[] args)  {
        Preferences pref=Preferences.systemRoot();
        pref.put("test", "Einstellungen");
        try {
            pref.flush();
        } catch (BackingStoreException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }

          System.out.println(pref.get("test", null));

    }
```

Bei dem Quellcode bekomme ich aber folgende Fehlermeldung

```
15.12.2009 21:25:25 java.util.prefs.WindowsPreferences openKey
WARNUNG: Could not open windows registry node Software\JavaSoft\Prefs at root 0x80000002. Windows RegOpenKey(...) returned error code 5.
Exception in thread "main" java.lang.SecurityException: Could not open windows registry node Software\JavaSoft\Prefs at root 0x80000002: Access denied
        at java.util.prefs.WindowsPreferences.openKey(WindowsPreferences.java:496)
        at java.util.prefs.WindowsPreferences.openKey(WindowsPreferences.java:463)
        at java.util.prefs.WindowsPreferences.openKey(WindowsPreferences.java:449)
        at java.util.prefs.WindowsPreferences.putSpi(WindowsPreferences.java:595)
        at java.util.prefs.AbstractPreferences.put(AbstractPreferences.java:234)
        at test.Main.main(Main.java:25)
Java Result: 1
```

Ok Acces denied versteh ich, aber warum? Und wie kann ich sicher gehen, dass des auf jedem System läuft. Und noch eine Frage, wie portabel ist des? Also Mac Linux Windows?



Wenn ich versuche ein Unterverzeichniss (node) anzulegen

```
public static void main(String[] args)  {
        Preferences pref=Preferences.systemRoot();
        Preferences sub=pref.node("Währungsrechner");
        sub.put("test", "Einstellungen");

        try {
            pref.flush();
        } catch (BackingStoreException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
       
          System.out.println(sub.get("test", null));

    }
```
bekomm ich immer noch eine Fehlermeldung, diesmal aber

```
run:
15.12.2009 21:32:14 java.util.prefs.WindowsPreferences <init>
WARNUNG: Could not create windows registry node Software\JavaSoft\Prefs\/!!&c!5!"o!()!d@"u!'c!cw"y!'`!}w"o!'4!~@"y at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
15.12.2009 21:32:14 java.util.prefs.WindowsPreferences WindowsRegOpenKey1
WARNUNG: Trying to recreate Windows registry node Software\JavaSoft\Prefs\/!!&c!5!"o!()!d@"u!'c!cw"y!'`!}w"o!'4!~@"y at root 0x80000002.
15.12.2009 21:32:14 java.util.prefs.WindowsPreferences openKey
null
WARNUNG: Could not open windows registry node Software\JavaSoft\Prefs\/!!&c!5!"o!()!d@"u!'c!cw"y!'`!}w"o!'4!~@"y at root 0x80000002. Windows RegOpenKey(...) returned error code 2.
15.12.2009 21:32:14 java.util.prefs.WindowsPreferences WindowsRegOpenKey1
WARNUNG: Trying to recreate Windows registry node Software\JavaSoft\Prefs\/!!&c!5!"o!()!d@"u!'c!cw"y!'`!}w"o!'4!~@"y at root 0x80000002.
15.12.2009 21:32:14 java.util.prefs.WindowsPreferences openKey
WARNUNG: Could not open windows registry node Software\JavaSoft\Prefs\/!!&c!5!"o!()!d@"u!'c!cw"y!'`!}w"o!'4!~@"y at root 0x80000002. Windows RegOpenKey(...) returned error code 2.
BUILD SUCCESSFUL (total time: 2 seconds)
```

Also klappt wieder nicht, schätz mal aus dem gleichen Grund wie oben, aber warum ist immer noch die Frage.


----------



## MichaelR (15. Dez 2009)

Ok, ich seh grad, wenn man nicht auf die systemRoot sondern auf den userRoot geht, dann klappt es. Aber kann mir jemand den Unterschied erklären?

Hmm, könnte mir denken, dass des was damit zu tun hat, ob nur der aktuelle Benutzer oder alle Benutzer auf die Dateien wieder zugreifen können.

Kann des evtl sein, dass man admin Rechte braucht um an die systemRoot zu kommen oder irgendwelche Einstellungen im Os (windows 7) des verhindern?
Wär auch interessant im Hinblick auch Portabilität.


----------



## Wildcard (15. Dez 2009)

systemRoot: für alle
userRoot: für den aktuellen Benutzer
und ja, du brauchst root Rechte um auf den Systemroot zugreifen zu können, da du darin Einstellungen für alle Benutzer vornimmst und das ist eine administrative Aufgabe.


----------



## Gastredner (16. Dez 2009)

MichaelR hat gesagt.:


> Wär auch interessant im Hinblick auch Portabilität.


Da unter Linux oder Mac keine Registry existiert, werden dort die gemachten Einstellungen in Dateien (XML, wenn ich mich korrekt erinnere) hinterlegt.
Wo die Dateien dabei landen, wird auch in der Insel erwähnt:


> [Die Systemeigenschaften landen bei Unix unter /etc/.java/.systemPrefs und die Benutzereigenschaften lokal unter $HOME/.java/.userPrefs. Mac OS X speichert Benutzereinstellungen im Verzeichnis /Library /Preferences/.]


----------

