# Alternative zu .properties Dateien



## Gast2 (9. Sep 2009)

Hi,
in meiner Anwendung verwende ich zum Abspeichern von Einstellungen eine Properties Datei.
Das ganze funktioniert auch wunderbar... eine kleine Unschönheit ist allerdings, dass immer wenn ich Einstellungen abspeichere alles Kreuz und Quer weggespeichert wird, es lässt sich nie ne Reihenfolge festlegen und man darf immer fleißig nach werten suchen 
Gibt es da ne Alternative mit der ich ohne größeren Programmieraufwand Einstellungsdateien speichern kann?
Wichtig wäre mir wie gesagt dass man eine klare Struktur erkennen kann (also bitte auch kein XML oder ähnliches) und diese auch erhalten bleibt 

Gruß


----------



## diggaa1984 (10. Sep 2009)

du könntest auf Preferences ausweichen, da brauchst dich nicht mal kümern wo und wie du die speicherst, das übernimmt java für dich .. in windows bspw: landen die Einträge in der Registry .. referenziert wird das ganze dann per Klassen oder Package-ID .. bin mir da grad net so sicher.


----------



## eRaaaa (10. Sep 2009)

aber bei properties haben wir doch auch key,value paare und können mittels getProperty() den wert auslesen? also wieso lange danach suchen? oder versteh ichs falsch ?!


----------



## Gast2 (10. Sep 2009)

eRaaaa hat gesagt.:


> aber bei properties haben wir doch auch key,value paare und können mittels getProperty() den wert auslesen? also wieso lange danach suchen? oder versteh ichs falsch ?!


Genau, aus Java heraus is das alles ganz easy, dafür gibts die Methoden.
Aber wenn ich jetzt aus Windows heraus (z.b. per notepad) an der Datei was ändern möchte sieht das alles ziemlich unübersichtlich aus. Außerdem ändert sich die reihenfolge der keys nach jedem speichern, d.h. man muss jedesmal ne endlose liste an keys durchschauen bis man den richtigen gefunden hat wo man dann das value ändern möchte.



> du könntest auf Preferences ausweichen, da brauchst dich nicht mal kümern wo und wie du die speicherst, das übernimmt java für dich .. in windows bspw: landen die Einträge in der Registry


Ich denke das kommt für mich auch nicht in Frage, da hat der Anwender ja noch mehr Schwierigkeiten sich zurechtzufinden :bae:

So würde ich mir meine Settingsdatei vorstellen: 


> [GENERAL OPTIONS]
> bla=blub
> key15=value123
> 
> ...


----------



## diggaa1984 (10. Sep 2009)

von Anwender-Änderungen war ja nich die Reden 

aber sone settingsdatei kannst dir ja locker selbst zusammenschreiben sind ja nur properties mit sections sozusagen.


----------



## eRaaaa (10. Sep 2009)

du kannst doch dne properties einen kommentar hinzufügen:

```
FileOutputStream propOutFile = new FileOutputStream(filename);

			Properties p1 = new Properties();

			p1.setProperty("bla", "blub");
			p1.setProperty("key15", "value123");
			p1.store(propOutFile, "[GENERAL OPTIONS]");

			Properties p2 = new Properties();
			p2.setProperty("user", "admin");
			p2.setProperty("password", "pw");
			p2.store(propOutFile, "[DATABASE OPTIONS]");
```

in der datei stehts dann so:


```
#[GENERAL OPTIONS]
#Thu Sep 10 01:12:29 CEST 2009
bla=blub
key15=value123
#[DATABASE OPTIONS]
#Thu Sep 10 01:12:29 CEST 2009
user=admin
password=pw
```

/edit also nur noch das problem mit der reihenfolge..hmm 
aber wieso sollte auch ein anwender in den dateien rumfummeln?


----------



## Gast2 (10. Sep 2009)

diggaa1984 hat gesagt.:


> von Anwender-Änderungen war ja nich die Reden
> 
> aber sone settingsdatei kannst dir ja locker selbst zusammenschreiben sind ja nur properties mit sections sozusagen.


Joa... hätte ich wohl besser erwähnen sollen 

Meinst du mit selbst zusammenschreiben, dass ich die Datei komplett selbst schreiben soll? Also per FileoutputStream und dann komplett per write("...") komplett händisch schreiben?
Da habe ich Bedenken dass das später mal zur Last werden könnte wenn ich da später 100+ key value paare habe.


----------



## diggaa1984 (10. Sep 2009)

EikeB hat gesagt.:


> Meinst du mit selbst zusammenschreiben, dass ich die Datei komplett selbst schreiben soll? Also per FileoutputStream und dann komplett per write("...") komplett händisch schreiben?
> Da habe ich Bedenken dass das später mal zur Last werden könnte wenn ich da später 100+ key value paare habe.



naja so gesehen muss auch eine .properties im E-Fall mit 1000en Einträgen klar kommen .. auch sie schreibt per Stream vermute ich mal in Datein und muss um Paare und soweiter auszulesen die Datei mind. 1x durchwühlen. Bestenfalls macht sie dies am Anfang und speichert alles intern ab .. Genau das würde ich persönlich auch machen wenn es darum geht sone Art .ini - Notation durchzudrücken.

Was du bräuchtest wäre ja nur eine Klasse, welche sowas bereitstellt wie 
	
	
	
	





```
createSection(String sec)
```


```
writeSection(String sec, String key, String value)
```
 .. und sowas alles. Wäre nicht wirklich umständlich


----------



## Gast2 (10. Sep 2009)

> aber wieso sollte auch ein anwender in den dateien rumfummeln?


In den Dateien befinden sich noch ne ganze Menge Einstellungsmöglichkeiten die über die GUI nicht einstellbar sind, wobei ich wohl (fast) der einzige sein werde der daran rumdoktort, aber mich störts halt iwie 

@diggaa1984
Ja ich denke das ist ne gute Idee, kann ich sicherlich auch nochmal in anderen Projekten verwenden dann 
Bin nur davon ausgegangen dass es sowas wohl schon gibt, wollte nicht das Rad neu erfinden


----------



## tuxedo (10. Sep 2009)

Was auch möglich wäre: Durch die properties iterieren, die File damit selbst schreiben, ABER das ganze alphabetisch sortieren. Dann würde man einen bekannten key schneller finden ... Auch wenn neue dazu kommen oder welche Wegfallen wäre die Reihenfolge mehr oder weniger definiert.

Wenns aber auf das Gruppieren ankommt find ich die Sections-Lösung auch schick. Wobei man da auch alphabetisch sortieren könnte.

- Alex


----------



## Ariol (10. Sep 2009)

Hab hier was gefunden, was die Properties entsprechend erweiteret:
Sort Properties when saving - Real's Java How-to


----------



## Gastredner (10. Sep 2009)

Wenn du einen Aufbau wie in einer .ini-Datei wünscht, ist das hier vielleicht was für dich:
[ini4j] - Java API for handling Windows ini file format


----------



## Atze (10. Sep 2009)

nur um mal etwas zu ändern, willst du dir das file selbst schreiben??? ich würd dann mit notepad lieber mit strg+f suchen


----------



## faetzminator (10. Sep 2009)

Anonsten würden mir für Configdateien nebst Porperties noch XML und/oder SQL (oder eine andere DB; die DB-Conn-Configuration muss natürlich wieder in eine Datei...) einfallen.


----------



## eRaaaa (10. Sep 2009)

EikeB hat gesagt.:


> (also bitte auch kein XML oder ähnliches)
> Gruß


----------



## faetzminator (10. Sep 2009)

Hat denn XML keine klare Struktur? Ich würde so was machen:

```
<config>
    <general>
        <item key="foo" value="bar"/>
        <item key="lang" value="en"/>
    </general>
    <database>
        [...]
    </database>
</config>
```


----------



## Atze (10. Sep 2009)

vielleicht sucht er ne simple struktur, die auch DAUs verstehen  xml mag für machen schon zu hoch sein


----------



## bygones (10. Sep 2009)

faetzminator hat gesagt.:


> Hat denn XML keine klare Struktur? Ich würde so was machen:


klare Strukur hat xml schon, nur das handling in Java ist katastrophal...


----------



## Ariol (10. Sep 2009)

Atze hat gesagt.:


> vielleicht sucht er ne simple struktur, die auch DAUs verstehen  xml mag für machen schon zu hoch sein



Das kommt sich dann aber mit der Aussage in die Quere, er wäre (voraussichtlich) der einzige der die Datei bearbeitet.


----------



## Atze (10. Sep 2009)

hm, vielleicht mag/kann er ja auch kein xml


----------



## Gast2 (10. Sep 2009)

> Das kommt sich dann aber mit der Aussage in die Quere, er wäre (voraussichtlich) der einzige der die Datei bearbeitet.


Es kann allerdings vorkommen, dass hin und wieder auch der Anwender darin was ändern kann/muss. Daher kommt auch kein XML in Frage.



> Wenn du einen Aufbau wie in einer .ini-Datei wünscht, ist das hier vielleicht was für dich:
> [ini4j] - Java API for handling Windows ini file format


Danke dir Gastredner! Genau das habe ich gesucht


----------

