Java-Properties-Datei

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Eine Java-Properties-Datei ist eine Konfigurationsdatei, die hauptsächlich zur Speicherung von Anwendungsdaten im Umfeld der Programmiersprache Java verwendet wird. Eine Property (deutsch „Eigenschaft“) ist in diesem Zusammenhang ein Text, der unter einem bestimmten Namen abgelegt ist. Java-Properties-Dateien haben üblicherweise die Dateiendung .properties.

Struktur[Bearbeiten | Quelltext bearbeiten]

Das folgende Beispiel zeigt einen Ausschnitt aus einer einfachen Konfigurationsdatei:

# Dies ist ein Kommentar
! Dies ist ebenfalls ein Kommentar
wenig Text
pi  = 3.14
lang:de
vieltext Dieser Text \
         läuft über zwei Zeilen.
paramText = Text mit dynamischem Parameter: {0}
unicodeText = Ein Smiley: \u263A

Das Beispiel enthält zwei Kommentarzeilen und definiert sechs Werte für die Namen wenig, pi, lang, vieltext, paramText und unicodeText.

Wie sich aus dem Beispiel erkennen lässt, gibt es Kommentarzeilen, die mit einem Doppelkreuz # oder einem Ausrufezeichen ! beginnen, und Datenzeilen, in denen ein Name und ein Text definiert werden.[1]

Name und Text können auf drei Arten voneinander getrennt werden, wobei die Trennzeichen nicht zum Schlüssel oder Text gehören.[1]

  1. durch ein oder mehrere Leerzeichen: Im obigen Beispiel hat der Schlüssel wenig den Wert „Text“, entsprechend vieltext.
  2. durch ein Gleichheitszeichen =, umgeben von keinem oder beliebig vielen Leerzeichen: Im obigen Beispiel hat der Schlüssel pi den Wert „3.14“.
  3. durch einen Doppelpunkt :, umgeben von keinem oder beliebig vielen Leerzeichen: Im obigen Beispiel hat der Schlüssel lang den Wert „de“.

Ein umgekehrter Schrägstrich \ am Ende der Zeile bedeutet, dass der Text in der nächsten Zeile fortgesetzt wird.[1] Stehen am Ende der Zeile mehrere umgekehrte Schrägstriche, wird der Text nur dann in der nächsten Zeile fortgesetzt, wenn die Anzahl der Schrägstriche ungerade ist. Endet die Zeile z. B. auf \\, so reicht der Text nur bis zum Ende der Zeile und enthält am Ende einen umgekehrten Schrägstrich; endet die Zeile hingegen auf \\\, dann wird der Text in der nächsten Zeile fortgesetzt.[1]

Als Zeichencodierung für den Text wird ISO 8859-1 verwendet. Unicode-Zeichen, die nicht im ISO-Encoding enthalten sind, müssen mit einer Escape-Sequenz codiert werden.[1]

Verwendung in Java-Programmen[Bearbeiten | Quelltext bearbeiten]

Eine solche Java-Properties-Datei kann mittels der Klasse java.util.Properties eingelesen werden. Anschließend können die definierten Werte über deren Methoden abgefragt werden. Das folgende Code-Fragment erzeugt ein Properties-Objekt, liest eine Datei namens beispiel.properties ein, und legt den Wert der Property lang in einer Variablen namens sprache ab.

import java.io.FileInputStream;
import java.io.BufferedInputStream;
import java.util.Properties;

Properties properties = new Properties();
BufferedInputStream stream = new BufferedInputStream(new FileInputStream("beispiel.properties"));
properties.load(stream);
stream.close();
String sprache = properties.getProperty("lang");

Bei der load-Methode muss die Ausnahme IOException abgefangen werden. Der Übersicht wegen wurde der Try-Catch-Block weggelassen.

Platzhalter[Bearbeiten | Quelltext bearbeiten]

Eine nicht negative ganze Zahl in geschweiften Klammern {} steht für einen Text, der zur Laufzeit des Programms ergänzt werden soll. Sinnvollerweise beginnen die Zahlen in den Klammern mit 0 und sind fortlaufend. Sie dürfen mehrfach sowie in beliebiger Reihenfolge auftreten. Solche Ersetzungen sind für die Internationalisierung oder Lokalisierung von Programmen sinnvoll, wo dynamisch zu erzeugende Textbestandteile in unterschiedlichen Sprachen an unterschiedlichen Stellen oder in unterschiedlicher Reihenfolge auszugeben sind.

Die Ersetzung des Parameters kann mit folgendem Code realisiert werden:

String paramText = properties.getProperty("paramText");
String dynText = "dynamisch eingesetzter Text";
System.out.println(MessageFormat.format(paramText,dynText));

Ausgabe:

Text mit dynamischem Parameter: dynamisch eingesetzter Text

Bei mehreren Ersetzungsparametern muss für „dynText“ ein Array oder eine Menge mit den Ersetzungswerten übergeben werden.

Streng genommen ist dies kein Feature des Properties-Mechanismus, wird hier jedoch erwähnt, da es in diesem Zusammenhang vielfach Verwendung findet.

Internationalisierung[Bearbeiten | Quelltext bearbeiten]

Ein weiteres Feature des Properties-Mechanismus in Java ist das Aufteilen der Inhalte pro Locale. Das macht man durch ein Suffix im Dateinamen kenntlich. Eine Properties-Datei messages.properties speziell für deutschsprachige Texte würde man messages_de.properties benennen. Das kann man mit der Angabe einer Region noch weiter eingrenzen. Eine Property-Datei für österreichisches Deutsch würde demnach so benannt: messages_de_AT.properties. Eine Variante ohne Suffix sollte als Fallback möglichst immer vorhanden sein. Seit Java 9 werden ResourceBundles-Properties standardmäßig mit UTF-8 decodiert, wodurch die unleserlichen Escape-Sequenzen entfallen können. Sollten beim Dekodieren Probleme auftreten, wird es mit ISO 8859-1 automatisch erneut versucht.[2]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. a b c d e Properties. Java API Specification
  2. JEP 226: UTF-8 Property Resource Bundles. Abgerufen am 22. Juni 2020.