Wenn wir an einer Java-Anwendung arbeiten, ist es üblich, dass wir mit einigen Konfigurationen arbeiten müssen, zum Beispiel unter anderem mit der URL einer Datenbank, dem Port eines Servers. Anstatt diese Einstellungen direkt im Code fest zu codieren, möchten wir sie von einer Stelle außerhalb des Codes abrufen, beispielsweise aus einer Eigenschaftendatei. Oder Sie können Konfigurationen sogar zur Laufzeit speichern, um sie später zu lesen.
In jedem dieser Fälle können wir für bestimmte Szenarien eigene Lösungen entwickeln, zum Beispiel eine Textdatei erstellen und in der ersten Zeile die URL der Datenbank speichern, in der zweiten Zeile den Server-Port usw. . Dies kann jedoch mühsam und fehleranfällig sein, sodass eine robustere und skalierbarere Lösung erforderlich ist. Für diese Art von Fällen stellt uns Java eine sehr einfache und effiziente Lösung zur Verfügung, die Properties-Klasse.
Properties ist eine Klasse im Paket java.util, die es uns ermöglicht, Konfigurationen sowohl vorübergehend im Speicher als auch dauerhaft in einer Eigenschaftendatei zu speichern, damit wir sie später lesen und in unserer Anwendung verwenden können. Durch das Erstellen einer Instanz der Properties-Klasse erhalten Sie ein Objekt, das sich wie ein Wörterbuch verhält, in dem jede Konfiguration als Schlüssel-Wert-Paar gespeichert wird.
Zu Beginn muss eine Instanz der Properties-Klasse erstellt werden.
Properties props = new Properties();
Durch die Erbung von der HashTable-Klasse (die wiederum von Dictionary erbt) können wir innerhalb der Properties-Klasse erkennen, dass sie über Methoden vom Typ Object verfügt, obwohl in Wirklichkeit erwartet wird, dass die Werte Zeichenfolgen oder Strings sind. und not ist es nicht notwendig, jedes Mal, wenn Sie mit einem Wert arbeiten, einen String umzuwandeln. Obwohl es in der Instanz gängige Kartenmethoden gibt, ist es auf diese Weise in den meisten Fällen nicht erforderlich, diese zu verwenden. Anstelle von get(Object key) können Sie beispielsweise getProperty(String key) verwenden.
Um eine Eigenschaft zu definieren, wird die Methode setProperty(String key, String value) verwendet. Wie der Name schon sagt, empfängt diese Methode zwei Parameter, den Schlüssel (wie Sie die Eigenschaft nennen möchten) und den Wert (den Eigenschaftswert). ), wenn man bedenkt, dass erwartet wird, dass beide Parameter immer vom Typ String sind.
Properties props = new Properties(); props.setProperty("DB_HOST", "localhost"); props.setProperty("DB_PORT", "3306"); props.setProperty("DB_USER", "root"); props.setProperty("DB_PASS", "p4ssw0rd");
Um eine Eigenschaft zu erhalten, können Sie die Methode getProperty(String key) verwenden, die als Parameter den Schlüssel der Eigenschaft empfängt, die Sie erhalten möchten. Wenn die Eigenschaft nicht vorhanden ist, wird null zurückgegeben.
Properties props = new Properties();
Um den Erhalt von Null zu vermeiden, falls eine Eigenschaft nicht vorhanden ist, können Sie die Methode getProperty(String key, String defaultValue) verwenden, die einen Standardwert als zweiten Parameter erhält.
Properties props = new Properties(); props.setProperty("DB_HOST", "localhost"); props.setProperty("DB_PORT", "3306"); props.setProperty("DB_USER", "root"); props.setProperty("DB_PASS", "p4ssw0rd");
Da es sich um ein Objekt vom Typ „Map“ handelt (obwohl die Verwendung von HashTable-Methoden nicht empfohlen wird), verfügt es über die Methode „entrySet()“, aber wie Sie sehen können, ist es vom Typ „Object“, eine Alternative zum Durchlaufen aller Eigenschaften um die Methode stringPropertyNames() zu verwenden, die eine Reihe von Zeichenfolgen mit allen Eigenschaftsschlüsseln zurückgibt (die zurückgegebenen Werte sind in keiner bestimmten Reihenfolge).
var API_URL = props.getProperty("API_URL"); System.out.println(API_URL); // Output null
Eine schnellere Möglichkeit, alle Eigenschaften anzuzeigen, ist die Verwendung der list(PrintStream out)-Methode, die alle Eigenschaften in den als Parameter übergebenen Ausgabestream druckt, zum Beispiel System.out.
var API_URL = props.getProperty("API_URL", "http://api.example.com"); System.out.println(API_URL); // Output http://api.example.com
Properties stellt die Methoden „store()“ und „storeToXML()“ bereit, sodass Eigenschaften in einem properties-Format (Schlüssel=Wert) und in einem XML-Format (dies kann sein) gespeichert werden können nützlich, wenn die Eigenschaften in verschiedenen Umgebungen verwendet werden). Verwenden Sie nicht die Methode save(), da sie veraltet ist und ihre Verwendung nicht empfohlen wird, da sie im Fehlerfall keine Ausnahmen auslöst.
Bevor wir die Eigenschaften in einer Datei speichern, können wir Folgendes tun, um über die Konsole zu überprüfen, was tatsächlich gespeichert wird, indem wir die Methode „store()“ und „System.out“ verwenden. Es ist wichtig, die ausgelöste Ausnahme irgendwie zu kontrollieren.
for (String prop : props.stringPropertyNames()) { System.out.println(prop + " = " + props.getProperty(prop)); } // Output DB_PORT = 3306 DB_PASS = p4ssw0rd DB_USER = root DB_HOST = localhost
Wenn Sie das Ergebnis analysieren, können Sie sehen, dass in der ersten Zeile der Kommentar, der als zweites Argument übergeben wird, gespeichert wird (es spielt keine Rolle, ob es sich um eine leere Zeichenfolge handelt, wenn sie null ist, wird sie nicht gedruckt). In der zweiten Zeile werden Datum und Uhrzeit der Speicherung der Eigenschaften gespeichert, und ab der dritten Zeile werden die Eigenschaften im Format Schlüssel=Wert.
gespeichertWenn die Methode storeToXML() verwendet wird, wird eine Datei mit folgendem Inhalt erhalten:
props.list(System.out); // Output -- listing properties -- DB_PORT=3306 DB_PASS=p4ssw0rd DB_USER=root DB_HOST=localhost
Um die Eigenschaften in einer Datei namens db.properties zu speichern, können Sie Folgendes tun:
props.store(System.out, "Database Configuration"); // Output #Database Configuration #Thu Oct 10 11:06:04 CST 2024 DB_HOST=localhost DB_PASS=p4ssw0rd DB_PORT=3306 DB_USER=root
Nach der Ausführung und wenn keine Ausnahme ausgelöst wird, werden Sie sehen, dass in dem Verzeichnis, in dem das Programm ausgeführt wurde, eine Datei mit dem Namen db.properties mit folgendem Inhalt erstellt wurde:
props.storeToXML(System.out, "Database Configuration"); // Output <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>Database Configuration</comment> <entry key="DB_PORT">3306</entry> <entry key="DB_PASS">p4ssw0rd</entry> <entry key="DB_USER">root</entry> <entry key="DB_HOST">localhost</entry> </properties>
Um die Eigenschaften im XML-Format zu speichern, ändern Sie einfach die Methode „store()“ in „storeToXML()“.
Properties props = new Properties();
Angenommen, eine Eigenschaft wurde in der Datei db.properties oder db.properties.xml geändert oder eine neue hinzugefügt, um die Eigenschaften aus einer der beiden Dateien zu laden, entweder in Eigenschaften oder XML können jeweils die Methoden „load()“ und „loadFromXML()“ verwendet werden. Es ist wichtig, die Ausnahme, die ausgelöst wird, wenn die Datei nicht existiert oder nicht gelesen werden kann, irgendwie zu kontrollieren.
Properties props = new Properties(); props.setProperty("DB_HOST", "localhost"); props.setProperty("DB_PORT", "3306"); props.setProperty("DB_USER", "root"); props.setProperty("DB_PASS", "p4ssw0rd");
var API_URL = props.getProperty("API_URL"); System.out.println(API_URL); // Output null
Sobald die Eigenschaften geladen sind, können sie in der Konsole angezeigt werden, um zu überprüfen, ob sie korrekt geladen wurden.
var API_URL = props.getProperty("API_URL", "http://api.example.com"); System.out.println(API_URL); // Output http://api.example.com
Wie wir gesehen haben, ermöglicht uns die Properties-Klasse, auf effiziente und einfache Weise mit Eigenschafts- oder Konfigurationsdateien zu arbeiten, sowohl um Eigenschaften zu speichern als auch zu lesen, was interessant zu wissen und in unseren Java-Anwendungen zu verwenden ist.
Das obige ist der detaillierte Inhalt vonWie verwende ich die Properties-Klasse in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!