Store Properties strukturiert Dateiinhalt der Properties Datei um

Hallo,

ich habe eine Properties Datei in etwa mit nachfolgender Struktur:
[SPOILER]
[Settings]
Start=48
End=758
Warning_Interval=72

[FTP]
Host=srvxt12
Port=1122
User=privateJohn

[RunSilent]
StopAsSoonAsPossible=true
MaxValue=10
RunTime=20[/SPOILER]

Der Wert StopAsSoonAsPossible=true kann in meinem Programm auf “false” gesetzt werden.

			prop.setProperty(StopAsSoonAsPossible, "false");
			prop.store(writer,null);
			writer.close();;```

Dabei wird mir aber die gesamte und für mich übersichtliche Struktur der Properties Datei über den Haufen geworfen. Gibt es für dieses nicht gewollte Verhalten eine bessere Lösung?

Danke sehr

GGK

Ja, denn das was du oben angegeben hast ist keine einfache Properties-Map sondern ein ini-File.
Unterschied: im Properties gibt es nur Key-Value-Paare deren Reihenfolge ein Implementierungsdetail der Map ist. Ein ini-File hat jedoch eine einfache Strukturebene die die Paare teilweise sortiert (oder besser: in einer Art Baum mit einer Ebene strukturiert). Ob beim Einlesen und nachträglichem Schreiben die Strukturreihenfolge beibehalten wird ist auch wieder ein Implementierungsdetail der verwendeten Lib, denn Java selbst hat keinen direkten Support für das ini-Format.

Grundsätzlich wäre in deinem Fall wohl XML besser.

Zum Topic: der Titel ist schlecht gewählt und hat beim ersten Lesen in der Übersicht bei mir erstmal den Gedanken “Ja und?” hervorgebracht, denn eine Struktur in einem strukturlosen Format ist auch nicht vorgesehen.
Gegenfrage: Warum willst du in einrm properties-File überhaupt eine solche Gliederung? Für die Verarbeitung ist es egal. Brauchst du aber in deiner Logik diese Struktur musst du dich nach einem andeten Format umsehen.

Hi,

danke für deine Hilfestellung. Ich möchte es nur humanreadable halten…für den Programmablauf hat es keine Bedeutung. Die einfache Lesbarkeit wäre mir aber wichtig, daher habe ich auch bewusst auf XML verzichtet.

GGK

Nicht mit der Properties-Klasse selbst. Die speichert intern in einem HashTable. Die store-Methode iteriert einfach über die Entries. Und deren Reihenfolge hängt zunächst vom hashCode der Keys ab und nur bei Kollisionen von der Reihenfolge des Einlesens.

Deine Properties-Datei ist aber auch nicht so glücklich. Die Sections gibt es in der ini-Dateiwelt. In Properties gibt es die überhaupt nicht. Du hast im Prinzip komische Keys ohne values. Sections würde man in Properties durch gemeinsame Präfixe abbilden. Also bspw. so:

#[Settings]
Settings.Start=48
Settings.End=758
Settings.Warning_Interval=72

Wenn Du Dich auf diese Änderung einlässt, könnte die Ausgabe von store schon übersichtlich genug sein. Falls nicht, die Ausgabe von stringPropertyNames() in ein TreeSet stopfen. Darüber iterieren, den jeweiligen Value holen und beides von Hand in die Datei speichern.

How can I write Java properties in a defined order? - Stack Overflow

‘keep/ preserve/ maintain order’ mit anderem klaren Begriffen dazu liefert manches,
fertiges einfaches aus der API gibt es aber gewiss nicht

So habe ich es auch gehalten. Diese Dateien werden allerdings bei mir durch Menschen nur über eine “Options”-Gui bearbeitet, also nicht direkt. Da ist die Reihenfolge recht egal, muss man reinschauen, kann man sie durch die Prefixxe zur Not auch einfach alphabetisch sortieren.

[QUOTE=GGK]Hi,

danke für deine Hilfestellung. Ich möchte es nur humanreadable halten…für den Programmablauf hat es keine Bedeutung. Die einfache Lesbarkeit wäre mir aber wichtig, daher habe ich auch bewusst auf XML verzichtet.

GGK[/QUOTE]
dann schau dir zb YAML Ain’t Markup Language an

Ich danke Euch, es ist schon unglaublich wie gut dieses Forum dank Eurer raschen und fundiert Unterstützung ist.

Danke!

GGK

Ich habe mal [ini4j] - Java API for handling Windows ini file format verwendet, war recht bequem.

Allerdings ist INI ein typisches Windows-Format.

Danke dir! Das ist genau das, wonach ich gesucht habe.

GGK