Java Properties
Willemers Informatik-Ecke
Map Threads

In den Properties lassen sich Konfigurationen speichern. Prinzipiell handelt es sich um eine Map, die als Schlüssel wie als Wert einen String verwendet.

Darüber hinaus ist es aber möglich, die Konfiguration einfach als Datei zu speichern und natürlich auch, aus dieser zu lesen.

Strings über Strings zugreifen

In den Properties lassen sich Konfigurationen speichern. Prinzipiell handelt es sich um eine Map, die als Schlüssel wie als Wert einen String verwendet. Relevant sind folgende Methoden der Properties:
import java.util.Properties;
public class Props {

    public static void main(String[] args) {
        Properties prop = new Properties();
        prop.setProperty("Alter", "12");
        prop.setProperty("Vorname", "Arnold");
        prop.setProperty("Nachname", "Willemer");
        System.out.println(prop.getProperty("Alter"));
        String vorname = prop.getProperty("Vorname");
        String nachname = prop.getProperty("Nachname");
        System.out.println(prop.getProperty("Name", vorname+" "+ nachname));
    }
}

Properties in Dateien ablegen und auslesen

Das folgende Programm liest eine Properties-Datei ein. Zunächst wird es diese nicht geben, also liefert das System eine Fehlermeldung.

Das Programm sucht nach dem Key "Farbe" und wird vermutlich nicht fündig. Die zurückgegebene null zeigt dies an. Anschließend wird wieder nach "Farbe" gesucht. Diesmal wird außer dem Key ein zweiter Paramter angegeben, der zurückgegeben wird, wenn es keinen Eintrag gibt.

Im nächsten Schritt wird eine Property "Breite" angelegt. Zuletzt wird die Property in der Datei gespeichert.

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

public class TestProps {

    public static void main(String[] args) {
        String dateiname="test.properties";
        Properties prop = new Properties();
        try {
            prop.load(new FileInputStream(dateiname));
        } catch (FileNotFoundException e) {
            System.out.println("Datei nicht vorhanden!");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("IO-Error");
            e.printStackTrace();
        }
        String inhalt = "";
        String key = "Farbe";
        inhalt = prop.getProperty(key); // suche nach Key
        if (inhalt==null) {
            System.out.println("Kein Wert für "+key+" vorhanden.");
        } else {
            System.out.println("Key: "+key+" Wert: "+inhalt);
        }
        inhalt = prop.getProperty(key, "grau"); // mit Default-Wert
        System.out.println("Key: "+key+" Wert: "+inhalt);
        key = "Breite";
        inhalt = "12";
        prop.setProperty(key, inhalt);
        try {
            prop.store(new FileOutputStream(dateiname), "");
        } catch (FileNotFoundException e) {
            System.out.println("Datei nicht vorhanden!");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("IO-Error");
            e.printStackTrace();
        }
    }

}
Sie können nun mit einem Editor von Hand in der Properties-Datei einen Wert für Farbe nachtragen. Als Trennzeichen können Sie ein Gleichheitszeichen, einen Doppelpunkt oder schlicht nichts verwenden. Das nächste Mal findet das Programm auch eine Farbe.

Das Auslesen der Properties erreicht man dadurch, dass man die Schlüssel in einem Set übernimmt und darüber iteriert.

//...
import java.util.Set;
//...

// Auslesen des kompletten Properties-Inhalts
Set<Object> propSet = prop.keySet();
for (Object obj : propSet) {
    key = (String) obj;
    String value = prop.getProperty(key);
    System.out.println("Key: "+key+" Wert: "+value);
}

Map Threads