# Liste als Properties



## JimK (26. Jul 2011)

Hallo,

ich bin die ganze Zeit auf der Suche nach einer Lösung meines Problems. Und zwar speichere ich einige Einstellungen in eine Datei ab. Das funktioniert soweit alles prima. Aber ist es auch möglich den Inhalt einer ArrayList als Properties zu speichern und wieder auszulesen?


```
speichern.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				
				Properties properties = new Properties();
				
				BufferedOutputStream stream;
				
				try{
				
					stream = new BufferedOutputStream(new FileOutputStream("config.properties"));
					
					properties.setProperty("Auslesen", s.getAbsolutePath());
					properties.setProperty("Speichern", spfad);
					properties.setProperty("Software", softwarepfad);
					for(TimeKonstruktor t : timelist)
					{
					properties.setProperty("Zeit", t.astd+":"+t.amin);
					}
					
				properties.store(stream, null);
				stream.close();
				}
				catch (IOException e) {
				}

				
			}
		});
```

Ich möchte nämlich gern eingetragene Uhrzeiten wieder laden können.
Vielen Dank schon mal.

LG
JIMK


----------



## Volvagia (26. Jul 2011)

Dafür serialisiert man eigendlich. (Oder schreibt sie direkt in eine Datei, serialisieren ist halt der faulere Weg.)
Properties sind doch nur Konfigurationsdateien?


----------



## ThreadPool (26. Jul 2011)

Properties sind Key, Value Paare mit einem eindeutigen Key. Verwendest du "Zeit" als Key immer wieder, wird der Wert überschrieben. Schreib die Liste halt in eine ganz normale Datei, CSV Format vll.


----------



## SlaterB (26. Jul 2011)

Properties sind ganz allgemein gesehen nur eine komfortable Möglichkeit Key,Value-Paare zu lesen und zu speichern,
bisschen besser als Txt, nicht unbedingt so strukturiert wie CSV oder Serialisierung, aber sicherer sind letztere auch nicht,
also Zweck wie Konfiguration/ Persistenz ziemlich egal

man könnte einen String aus der Liste zusammenbauen und diesen als einen Value speichern, ob gleich im Format einer CSV-Zeile oder anders ist relativ egal,
später muss man diesen String wieder parsen, bei Properties wahrscheinlich ziemlich manuell,
in anderne Formaten hat man mit etwas Glück Unterstützung durch Tools, bei Serialisierung sowieso


----------



## nillehammer (26. Jul 2011)

Threadpool hat Recht,
am Ende steht immer nur der letzte Wert Deiner ArrayList als Value des Zeit-Properties. Aber Du kannst Die Schleife so umschreiben, dass die einzelnen Zeit-Values durch Trennzeichen getrennt sind. Beim Einlesen kannst Du dann splitten:

```
/* Code zum setzen des Properties */
final StringBuilder builder = new StringBuilder();
final Iterator<TimeKonstruktor> iter =  timelist.iterator();
while(iter.hasNext())
{
 builder.append(t.astd+":"+t.amin);
  // Bei allen elementen außer dem letzten das Trennzeichen hinzufügen.
  if (iter.hasNext()) {
   builder.append(";");
 }
}
properties.setProperty("Zeit", builder.toString());
...
/* Code zum erzeugen der Liste */
final String[] zeiten = properties.getProperty("Zeit").split(";");
// mit dem Array von Strings deine TimeKonstruktor Instanzen erzeugen und in eine Liste speichern
```


----------



## JimK (27. Jul 2011)

Ich habe es endlich. ^^Vielen Dank für eure Hilfe.


----------



## Landei (27. Jul 2011)

Solange es nicht zuviele Werte sind, kann man auch die Schlüssel numerieren, also Zeit0, Zeit1, Zeit2...

Beim Einlesen liest man dann halt solange, bis man für Zeit... keinen Wert mehr bekommt. 

Aber für mehr als zehn, fünfzehn Werte würde ich es nicht einsetzen, dann lieber etwas strukturiertes (z.B. XML).


----------

