# Welches Dateiformat für gespeicherte Einstellungen?



## Endymion (2. Nov 2011)

Hallo erstmal, ich hätte eine Frage: Bei manchen Programmen muss man ja einstellungen speichern, und das macht man ja logischerweise mit Dateiein. Meine Frage wäre, welche Dateitypen man da verwendet. in meinem AppData-Ordner (welcher meiens wissens für so etwas verwendet wird, korrigiert mich, wenn ich falsch liege) sind die meisten dateien XML-Dokumente. Diese sind aber meines wissens erstens relativ schwer auszulesen, und von einem Java-Programm auch sehr schwer zu schreiben. Gibt es nich andere Möglichkeiten? Oder gibt es irgend eine total simple Möglichkeit, mit Java XML-Dokumente zu schreiben und zu lesen?


----------



## Gelöschtes Mitglied 5909 (2. Nov 2011)

so ziemlich das einfachste wären property files 

Java ist auch eine Insel – 11.7 Die Properties-Klasse


----------



## Endymion (2. Nov 2011)

Ok, danke, und was für ein "Kürzel" (ich weiß nicht, wie das heißt) hat diese Datei? ich Textdateien ist es ja .txt. Wie ist es bei einer Property-Datei?


----------



## Gasssst (2. Nov 2011)

i.d.R. ".kartoffelsalat"


----------



## Gast2 (2. Nov 2011)

Was Gasssst damit sagen möchte: die Dateiendung ist egal.
Es kommt nur drauf an was in der Datei steht. Du kannst auch ne Textdatei mit der Endung .png abspeichern und dann wieder in nem Editor öffnen.


----------



## Tomate_Salat (2. Nov 2011)

wobei Properties-Dateien i.d.R die Endung .properties haben. Das hat den Vorteil, dass z.B. Eclipse diese Datei standardmäßig mit Syntaxhighlighting startet. Wobei man bei diesen Dateien wohl auch ohne Probleme darauf verzichten könnte. Aber letztendlich hat die Datei-Endung keine Auswirkungen auf die Datei selber. Es ist nur eine Hilfe für z.B. dein Betriebssystem, zu wissen, mit welchem Programm diese Datei geöffnet werden soll.


----------



## Endymion (3. Nov 2011)

Ok, vielen Dank.


----------



## Guybrush Threepwood (3. Nov 2011)

Wieso nicht Preferences (Java Platform SE 6)
Dann muss man sich nicht um irgendwelche Dateien selbst kümmern.


----------



## Gast2 (3. Nov 2011)

Guybrush Threepwood hat gesagt.:


> Wieso nicht Preferences (Java Platform SE 6)
> Dann muss man sich nicht um irgendwelche Dateien selbst kümmern.



zustimm


----------



## Tomate_Salat (3. Nov 2011)

Guybrush Threepwood hat gesagt.:


> Wieso nicht Preferences (Java Platform SE 6)



Bin ich kein Fan von. Die Registry ist doch schon zugemüllt genug.


----------



## Gast2 (3. Nov 2011)

Die Preferences API läuft aber nicht nur auf Windows. ebenso auf Linux und Mac. 

Dort gibts keine registry. Und wer auch unter Windows nen anderen Backing Store nutzen will kann folgenden nutzen: File Backing Store for Preferences API

Edit: Wollte den immer mal testen habs aber selber noch nicht getan.


----------



## faetzminator (3. Nov 2011)

Tomate_Salat hat gesagt.:


> Es ist nur eine Hilfe für z.B. dein Betriebssystem, zu wissen, mit welchem Programm diese Datei geöffnet werden soll.



*räusper* es ist nur eine Hilfe für Windoof, alle anderen haben gemerkt, dass die Dateiendung s******egal ist :bae:

Es gibt da viele Ansätze, wie man es machen könnte
1. Serialisierung eines Settingobjekts
Vorteil: Es können ganze Objekte ohne viel eigenen Code gespeichert werden
Nachteil: Diese Objekte dürfen sich nicht ändern (also du kannst sie nicht nachträglich erweitern), da sie dann nicht mehr ladbar sind. Auch nicht zur Konvertierung in das "neue Format"
2. Preferences
Vorteil: Ist wieder was existierends, was wenig Code benötigt
Nachteil: man hat keinen einfachen, externen Zugriff auf die Daten, da nicht vorgegeben ist, wie was wo gespeichert wird. Es können nur Strings gespeichert werden.
3. Properties
Vorteil: Ist wieder was existierends, was wenig Code benötigt
Nachteil: Ist nicht für komplexe Strukturen geeignet und kann nur Strings aufnehmen.
4. XML
Vorteil: Du kannst alles in einer von Menschen lesbarer Form komplex aufbauen - so komplex du willst.
Nachteil: Du musst dir eine für dich passende Lib für XML suchen. Java hat standardmässig 2 Parser im Angebot, finde die aber nicht gerade toll. Ich würde JDOM empfehlen. Auch hier muss alles auf Basis von Strings funktionieren.
5. Dein eigenes Dateiformat
Viel Spass :bae:
6. ...


----------



## Guybrush Threepwood (3. Nov 2011)

Tomate_Salat hat gesagt.:


> Bin ich kein Fan von. Die Registry ist doch schon zugemüllt genug.



Ja, aber das kann dem Java-Programm ja egal sein. Funktionieren tut es in jedem Fall sehr gut, und es geht ja auch nicht um die Ablage größerer Datenmengen, sondern einer sehr begrenzten Anzahl an booleans, ints und floats.


----------



## Tomate_Salat (3. Nov 2011)

kappesf hat gesagt.:


> Die Preferences API läuft aber nicht nur auf Windows. ebenso auf Linux und Mac.


Ich weiß. Trotzdem fördert das ganze Datenmüll. Ohne richtigen Deinstaller ist das imho eine hässliche Lösung.



> Und wer auch unter Windows nen anderen Backing Store nutzen will kann folgenden nutzen: File Backing Store for Preferences API


schaut wirklich interessant aus, aber bei dem Workaround nehme ich lieber Properties,xml oder H2 ;-)




faetzminator hat gesagt.:


> *räusper* es ist nur eine Hilfe für Windoof, alle anderen haben gemerkt, dass die Dateiendung s******egal ist :bae:


*räusper* da stand ein z.B. was ausgeschrieben "zum Beispiel" bedeutet und dem Lesenden Subjekt vermitteln soll, dass es sich hier um ein Beispiel handelt. :bae:

*Edit:*


Guybrush Threepwood hat gesagt.:


> sondern einer sehr begrenzten Anzahl an booleans, ints und floats.


Kleinvieh macht auch mist ;-)


----------



## Gast2 (3. Nov 2011)

> Ich weiß. Trotzdem fördert das ganze Datenmüll. Ohne richtigen Deinstaller ist das imho eine hässliche Lösung.



Ist das nicht selbstverständlich einen anständigen Deinstaller (zumindest bei Windoof) zur Verfügung zu stellen? 

Im übrigen werden auch im appdata die Einstellungen meist nicht gelöscht. Egal obs in der Registry oder sonst wo gespeichert wird.


----------



## Tomate_Salat (3. Nov 2011)

kappesf hat gesagt.:


> Ist das nicht selbstverständlich einen anständigen Deinstaller (zumindest bei Windoof) zur Verfügung zu stellen?


Bei Windows sieht man es häufig, ja. Bei Mac zum Beispiel habe ich noch nie einen Benutzt/gesehen. Wobei hier auch die Installation meistens eine Copy&Paste-Variante war. Mit Linux habe ich schon zu lange nichts mehr gemacht.



> Im übrigen werden auch im appdata die Einstellungen meist nicht gelöscht. Egal obs in der Registry oder sonst wo gespeichert wird.


Wenn die in einem entsprechenden Unterordner sind, hat man wenigstens noch die Chance, drauf zu kommen, dass man diese Dateien nicht mehr braucht. Bei Daten in der Registry oder ähnlichem hast du verloren ... Ist meine Meinung. Wie gesagt, wenn man einen [strike]De[/strike]Uninstaller mitlieferst, der wieder aufräumt, dann habe ich nichts mehr  zu meckern


----------



## Gast2 (3. Nov 2011)

> Wie gesagt, wenn man einen DeUninstaller mitlieferst, der wieder aufräumt, dann habe ich nichts mehr zu meckern



Unter WIndows immer, da die ganzen Anwender im Office sonst doch gar nichts "installieren" können 

PS: Ich nutze InnoSetupComiler. Damit gehts extrem einfach. Und damit niemand seine *.exe vermisst gibts noch nen Wrapper mittels Launcher4j

Mac machen wir in der Regel nicht und Linux Nutzer können einfach die Anwendung kopieren ohne damit überfordert zu sein ^^


----------



## Andi_CH (3. Nov 2011)

kappesf hat gesagt.:


> Die Preferences API läuft aber nicht nur auf Windows. ebenso auf Linux und Mac.



Aber sind die gespeicherten Daten auch auf den anderen Plattformen brauchbar?

IMHO ist es wichtig, dass nicht nur das Programm sondern auch die gespeicherte Properties, Settings oder was auch immer für Daten portabel sind. Ein human readable format ziehe ich jedem Binärformat, auch noch aus anderen Gründen, vor.


----------



## Guybrush Threepwood (3. Nov 2011)

Andi_CH hat gesagt.:


> Aber sind die gespeicherten Daten auch auf den anderen Plattformen brauchbar?
> 
> IMHO ist es wichtig, dass nicht nur das Programm sondern auch die gespeicherte Properties, Settings oder was auch immer für Daten portabel sind. Ein human readable format ziehe ich jedem Binärformat, auch noch aus anderen Gründen, vor.



Hängt das nicht vom Anwendungsszenario ab? Bei "Preferences" gibt man beim Abruf stets einen default-Wert mit, für den Fall, dass der Schlüssel noch nicht in der Registry steht. Das ist ja dann letztlich die Grundeinstellung, auf die Du ansprichst. Ich verwende seit Jahren in meinen Programmen (kommerziell; Windows, Linux Mac, jeweils mit angepassten Versionen je nach Betriebssystem) für diese Zwecke Preferences und hatte noch nie Probleme. Es ist meiner Ansicht nach die eleganteste Möglichkeit, nachdem ich zuvor immer mit Properties gewurschtelt hatte. Bei Properties besteht ja das gleiche Problem, dass man diese in Nutzerverzeichnissen speichern muss und normalerweise nicht auf das programmverzeichnis schreibend zugreifen darf. Es wäre dadurch nichts gewonnen. Darüber hinaus kann man überall im Programm sehr leicht auf die Registry zugreifen und muss nicht mit Dateien jonglieren.


----------



## thE_29 (3. Nov 2011)

@faetzminator: 
1. Serialisierung eines Settingobjekts
Nachteil: Diese Objekte dürfen sich nicht ändern (also du kannst sie nicht nachträglich erweitern), da sie dann nicht mehr ladbar sind. Auch nicht zur Konvertierung in das "neue Format"

Also wenn sich die serialVersionUID NIEMALS ändert, dann kann man bestehende Klassen auch erweitern...

Die neuen Klassen-variablen sind dann halt defaultmäßig geleert..


----------



## faetzminator (3. Nov 2011)

Ok, in diesem Fall mag es funktionieren. Aber viel Spass mit Settings, bei denen du immer nur neue Dinge aufnehmen kannst


----------

