<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Java-Properties-Datei</id>
	<title>Java-Properties-Datei - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Java-Properties-Datei"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Java-Properties-Datei&amp;action=history"/>
	<updated>2026-05-18T16:14:17Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Java-Properties-Datei&amp;diff=384085&amp;oldid=prev</id>
		<title>imported&gt;Karl432: Benennung des Zeichens „#“ „Rautezeichen“ statt „Doppelkreuz“</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Java-Properties-Datei&amp;diff=384085&amp;oldid=prev"/>
		<updated>2024-10-14T10:48:42Z</updated>

		<summary type="html">&lt;p&gt;Benennung des Zeichens „#“ „Rautezeichen“ statt „Doppelkreuz“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Eine &amp;#039;&amp;#039;&amp;#039;Java-Properties-Datei&amp;#039;&amp;#039;&amp;#039; ist eine [[Konfigurationsdatei]], die hauptsächlich zur Speicherung von Anwendungsdaten im Umfeld der Programmiersprache [[Java (Programmiersprache)|Java]] verwendet wird. Eine &amp;#039;&amp;#039;Property&amp;#039;&amp;#039; (deutsch „Eigenschaft“) ist in diesem Zusammenhang ein Text, der unter einem bestimmten Namen abgelegt ist. Java-Properties-Dateien haben üblicherweise die [[Dateiendung]] &amp;lt;code&amp;gt;.properties&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Struktur ==&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel zeigt einen Ausschnitt aus einer einfachen Konfigurationsdatei:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;properties&amp;quot;&amp;gt;&lt;br /&gt;
# Dies ist ein Kommentar&lt;br /&gt;
! Dies ist ebenfalls ein Kommentar&lt;br /&gt;
wenig Text&lt;br /&gt;
pi  = 3.14&lt;br /&gt;
lang:de&lt;br /&gt;
vieltext Dieser Text \&lt;br /&gt;
         läuft über zwei Zeilen.&lt;br /&gt;
paramText = Text mit dynamischem Parameter: {0}&lt;br /&gt;
unicodeText = Ein Smiley: \u263A&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Beispiel enthält zwei [[Kommentar (Programmierung)|Kommentarzeilen]] und definiert sechs Werte für die Namen &amp;lt;code&amp;gt;wenig&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pi&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lang&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vieltext&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;paramText&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;unicodeText&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Wie sich aus dem Beispiel erkennen lässt, gibt es Kommentarzeilen, die mit einem [[Rautezeichen]] &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; oder einem [[Ausrufezeichen]] &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; beginnen, und Datenzeilen, in denen ein Name und ein Text definiert werden.&amp;lt;ref name=&amp;quot;store&amp;quot;&amp;gt;[https://docs.oracle.com/javase/7/docs/api/java/util/Properties.html &amp;#039;&amp;#039;Properties&amp;#039;&amp;#039;.] Java API Specification&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Name und Text können auf drei Arten voneinander getrennt werden, wobei die Trennzeichen nicht zum Schlüssel oder Text gehören.&amp;lt;ref name=&amp;quot;store&amp;quot; /&amp;gt;&lt;br /&gt;
# durch ein oder mehrere [[Leerzeichen]]: Im obigen Beispiel hat der Schlüssel &amp;lt;code&amp;gt;wenig&amp;lt;/code&amp;gt; den Wert „Text“, entsprechend &amp;lt;code&amp;gt;vieltext&amp;lt;/code&amp;gt;.&lt;br /&gt;
# durch ein [[Gleichheitszeichen]] &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;, umgeben von keinem oder beliebig vielen Leerzeichen: Im obigen Beispiel hat der Schlüssel &amp;lt;code&amp;gt;pi&amp;lt;/code&amp;gt; den Wert „3.14“.&lt;br /&gt;
# durch einen [[Doppelpunkt]] &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;, umgeben von keinem oder beliebig vielen Leerzeichen: Im obigen Beispiel hat der Schlüssel &amp;lt;code&amp;gt;lang&amp;lt;/code&amp;gt; den Wert „de“.&lt;br /&gt;
&lt;br /&gt;
Ein [[umgekehrter Schrägstrich]] &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt; am Ende der Zeile bedeutet, dass der Text in der nächsten Zeile fortgesetzt wird.&amp;lt;ref name=&amp;quot;store&amp;quot; /&amp;gt; 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.&amp;amp;nbsp;B. auf &amp;lt;code&amp;gt;\\&amp;lt;/code&amp;gt;, so reicht der Text nur bis zum Ende der Zeile und enthält am Ende einen umgekehrten Schrägstrich; endet die Zeile hingegen auf &amp;lt;code&amp;gt;\\\&amp;lt;/code&amp;gt;, dann wird der Text in der nächsten Zeile fortgesetzt.&amp;lt;ref name=&amp;quot;store&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&amp;lt;ref name=&amp;quot;store&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Verwendung in Java-Programmen ==&lt;br /&gt;
&lt;br /&gt;
Eine solche Java-Properties-Datei kann mittels der [[Klasse (Objektorientierung)|Klasse]] &amp;lt;code&amp;gt;[https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html java.util.Properties]&amp;lt;/code&amp;gt; eingelesen werden. Anschließend können die definierten Werte über deren [[Methode (Programmierung)|Methoden]] abgefragt werden. Das folgende Code-Fragment erzeugt ein Properties-Objekt, liest eine Datei namens &amp;lt;code&amp;gt;beispiel.properties&amp;lt;/code&amp;gt; ein, und legt den Wert der Property &amp;lt;code&amp;gt;lang&amp;lt;/code&amp;gt; in einer Variablen namens &amp;lt;code&amp;gt;sprache&amp;lt;/code&amp;gt; ab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.FileInputStream;&lt;br /&gt;
import java.io.BufferedInputStream;&lt;br /&gt;
import java.util.Properties;&lt;br /&gt;
…&lt;br /&gt;
Properties properties = new Properties();&lt;br /&gt;
BufferedInputStream stream = new BufferedInputStream(new FileInputStream(&amp;quot;beispiel.properties&amp;quot;));&lt;br /&gt;
properties.load(stream);&lt;br /&gt;
stream.close();&lt;br /&gt;
String sprache = properties.getProperty(&amp;quot;lang&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Bei der &amp;lt;code&amp;gt;load&amp;lt;/code&amp;gt;-Methode muss die [[Ausnahmebehandlung|Ausnahme]] &amp;lt;code&amp;gt;[https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html IOException]&amp;lt;/code&amp;gt; abgefangen werden. Der Übersicht wegen wurde der Try-Catch-Block weggelassen.&lt;br /&gt;
&lt;br /&gt;
== Platzhalter ==&lt;br /&gt;
&lt;br /&gt;
Eine [[Positive und negative Zahlen|nicht negative]] [[ganze Zahl]] in geschweiften Klammern &amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt; steht für einen Text, der zur [[Laufzeit (Informatik)|Laufzeit]] des Programms ergänzt werden soll. Sinnvollerweise beginnen die Zahlen in den Klammern mit &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; und sind [[fortlaufend]]. Sie dürfen mehrfach sowie in beliebiger [[Reihenfolge]] auftreten. Solche Ersetzungen sind für die [[Internationalisierung (Softwareentwicklung)|Internationalisierung]] oder [[Lokalisierung (Softwareentwicklung)|Lokalisierung]] von Programmen sinnvoll, wo dynamisch zu erzeugende Textbestandteile in unterschiedlichen [[Sprache]]n an unterschiedlichen Stellen oder in unterschiedlicher Reihenfolge auszugeben sind.&lt;br /&gt;
&lt;br /&gt;
Die Ersetzung des Parameters kann mit folgendem Code realisiert werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
String paramText = properties.getProperty(&amp;quot;paramText&amp;quot;);&lt;br /&gt;
String dynText = &amp;quot;dynamisch eingesetzter Text&amp;quot;;&lt;br /&gt;
System.out.println(MessageFormat.format(paramText,dynText));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ausgabe:&lt;br /&gt;
 Text mit dynamischem Parameter: dynamisch eingesetzter Text&lt;br /&gt;
Bei mehreren Ersetzungsparametern muss für „dynText“ ein [[Array (Datentyp)|Array]] oder eine [[Menge (Datenstruktur)|Menge]] mit den Ersetzungswerten übergeben werden.&lt;br /&gt;
&lt;br /&gt;
Streng genommen ist dies kein Feature des Properties-Mechanismus, wird hier jedoch erwähnt, da es in diesem Zusammenhang vielfach Verwendung findet.&lt;br /&gt;
&lt;br /&gt;
== Internationalisierung ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;messages.properties&amp;lt;/code&amp;gt; speziell für deutschsprachige Texte würde man &amp;lt;code&amp;gt;messages_de.properties&amp;lt;/code&amp;gt; benennen. Das kann man mit der Angabe einer Region noch weiter eingrenzen. Eine Property-Datei für österreichisches Deutsch würde demnach so benannt: &amp;lt;code&amp;gt;messages_de_AT.properties&amp;lt;/code&amp;gt;. 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.&amp;lt;ref&amp;gt;{{Internetquelle |url=https://openjdk.java.net/jeps/226 |titel=JEP 226: UTF-8 Property Resource Bundles |abruf=2020-06-22}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Datenserialisierungformat]]&lt;br /&gt;
[[Kategorie:Konfigurationsdatei]]&lt;br /&gt;
[[Kategorie:Java (Programmiersprache)]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Karl432</name></author>
	</entry>
</feed>