# Preferences als XML



## Dit_ (29. Okt 2009)

Hallo!

ich habe gegoogelt und das hier zum Thema Preferences gefunden


```
public class PreferencesTest {
 
     public static void main(String[] args) {
         Preferences prefs = Preferences.systemRoot();
         
         prefs.put("key","value");
         try {
             prefs.flush();
         } catch (BackingStoreException e) {
             e.printStackTrace();
         }
         
     }
 }
```

*Frage 1.*
ich habe das so verstanden dass ich jetzt zum Beispiel folgendes machen kann


```
prefs.putBoolean("ansichtEinfach", true);
prefs.putInt("fensterBreite",600);
prefs.putInt("fensterHoehe", 400);
```
richtig ? 

*Frage 2.*
Alle keys werden unter Windows in Registry gespeichert und zwar in dem Fall unter
_HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\*Prefs*_

richtig ? Wenn ja woher kommt der Ordner *Prefs *her?


*Frage 3. *

Ist es möglich meine Programmeinstellungen nur als XML *und(!)* in einem bestimmten Ordner  zu speichern bzw auszulesen ? Ich moechte mein Programm auch unter Linux nutzen können.
Wenn ja, wie geht das ?

Danke schon mal


----------



## Wildcard (29. Okt 2009)

Die Preferences API versteckt die Implementierungsdetails vor dir, weil sie nicht interessant sind. In Windows kann der Backing Store die Registry sein, oder auch etwas anderes. Auf Linux Systemen würden die Preferences Beispielsweise in einem versteckten Verzeichnis in user.home landen. Das funktioniert auf allen Betriebssystemen um die Details musst du dich nicht kümmern.


----------



## Dit_ (29. Okt 2009)

axooo das ist ja super  danke sehr!


----------



## Gast2 (28. Jul 2011)

Sorry fürs ausgraben! 

Ich habe dir Vorgabe nichts in der Registry zu speichern. Kann ich die Preferences API dazu zwingen an einem bestimmten Ort in einer XML zu speichern? 

Schon mal vielen Dank!


----------



## Guybrush Threepwood (28. Jul 2011)

Nimm für diesen Anwendungszweck Properties: Properties (Java Platform SE 6)


----------



## Gast2 (28. Jul 2011)

Guybrush Threepwood hat gesagt.:


> Nimm für diesen Anwendungszweck Properties: Properties (Java Platform SE 6)



Ich möchte ja eben die Vorzüge der Preferences API nutzen. Da kommen demnach keine properties in Frage, da diese gänzlich andere Möglichkeiten bieten bzw nicht bieten.


----------



## Guybrush Threepwood (28. Jul 2011)

Nun ja, wenn Du explizit verhindern willst, dass die Registry genutzt wird, dann wirst Du wohl etwas anderes nehmen müssen. Die Frage klingt ein bisschen wie: "Ich möchte einen JFrame verwenden, habe aber die Vorgabe, dass ich keinen JFrame verwenden darf."


----------



## Wildcard (28. Jul 2011)

Wenn du die User Node verwendest und der User kein Recht hat in die Registry zu schreiben, wird auch nichts in die Registry geschrieben. Wenn er doch Rechte vermutlich ebenfalls nicht (bei der User Node), aber das solltest du besser nochmal genau nachlesen.


----------



## Guybrush Threepwood (29. Jul 2011)

Also bei Preferences.userNodeForPackage(EigeneKlasse.class); hat eigentlich jeder Zugriff, jedoch sind die Daten natürlich sauber getrennt. Wenn man auf systemRoot zugreifen möchte, dann muss die Applikation unter Windows im Administratormodus laufen, was nicht sonderlich schön ist. Gleiches Problem ergibt sich aber in jedem Fall auch beim Speichern von Settings als XML-Daten. Auch dort sind die Benutzerverzeichnisse schließlich voneinander separiert. Wie man es dreht oder wendet: Es geht nur entweder mit Adminstratorrechten oder getrennten benutzerspezifischen Einstellungen, egal ob als XML gespeichert, oder in Form externer Dateien.


----------



## Gast2 (29. Jul 2011)

Naja wollte eher wissen ob man in der Preferences API den Standard SPeicherort irgendwo ändern kann. so was wie 

Preferences.setArchiveType(Preferences.XML);
Preferences.setArchiveType(Preferences.STANDARD);
...

Gibts wohl nicht also.... Pech gehabt.


----------



## Landei (29. Jul 2011)

Es gibt da so eine Webseite namens "Google". Da gibt man ein "Java preferences file" und bekommt als erstes Ergebnis:

Java Preferences using a file as the backing store | davidc.net

Toll, nicht?


----------



## Gast2 (29. Jul 2011)

Landei hat gesagt.:


> Es gibt da so eine Webseite namens "Google". Da gibt man ein "Java preferences file" und bekommt als erstes Ergebnis:
> 
> Java Preferences using a file as the backing store | davidc.net
> 
> Toll, nicht?



Indeed! 

Ne im Ernst ist echt Interessant les ich nachher mal durch! Hab bei Google dazu tatsächlich nichts gefunden. Hab aber auch nie nach Backing Store gesucht sondern nach "Java Preferences API save in file" z.B. Da fand man den Beitrag nicht. 

Vielen Dank für den Hinweis!


----------

