首頁 > Java > java教程 > 主體

如何在Java中使用Properties類別?

DDD
發布: 2024-10-31 08:35:30
原創
606 人瀏覽過

¿Cómo usar la clase Properties en Java?

介紹

當我們開發 Java 應用程式時,通常需要使用一些配置,例如資料庫的 URL、伺服器的連接埠等。我們不想將這些設定直接硬編碼到程式碼中,而是從程式碼外部的某個位置(例如屬性檔)取得它們。或甚至能夠在運行時保存配置以便稍後讀取。

無論哪種情況,我們都可以針對某些場景制定自己的解決方案,例如創建一個文字檔案並在第一行保存資料庫的URL,在第二行保存伺服器連接埠等。但這可能很乏味且容易出錯,因此需要更強大且可擴展的解決方案。對於這種情況,Java 為我們提供了一個非常簡單且有效率的解決方案,即 Properties 類別。

什麼是屬性類別?

Properties 是 java.util 套件中的一個類,它允許我們將配置暫時保存在記憶體中並永久保存在屬性檔案中,以便我們稍後可以讀取它們並在我們的應用程式中使用它們。透過建立 Properties 類別的實例,您將獲得一個行為類似於字典的對象,其中每個配置都保存為鍵值對。

使用屬性類別

首先,必須建立 Properties 類別的實例。

Properties props = new Properties();
登入後複製
登入後複製
登入後複製

透過繼承HashTable類別(它又繼承自Dictionary),在Properties類別中我們可以看到它有Object類型的方法,而實際上值應該是字串或String,而不是,每次使用值時都不需要強制轉換字串。這樣,雖然實例中存在地圖的常用方法,但大多數情況下沒有必要使用它們。例如,您可以使用 getProperty(String key),而不是使用 get(Object key)。

定義屬性

定義一個屬性,需要用到setProperty(String key, String value)方法,正如它的名字所示,這個方法接收兩個參數,key(你想如何呼叫屬性)和value(屬性值) ),考慮到兩個參數始終應為String 類型。

Properties props = new Properties();
props.setProperty("DB_HOST", "localhost");
props.setProperty("DB_PORT", "3306");
props.setProperty("DB_USER", "root");
props.setProperty("DB_PASS", "p4ssw0rd");
登入後複製
登入後複製
登入後複製

獲得房產

要取得屬性,可以使用 getProperty(String key) 方法,該方法接收要取得的屬性的鍵作為參數,如果屬性不存在,將傳回 null。

Properties props = new Properties();
登入後複製
登入後複製
登入後複製

為了避免在屬性不存在時取得 null,您可以使用 getProperty(String key, String defaultValue) 方法,該方法接收預設值作為第二個參數。

Properties props = new Properties();
props.setProperty("DB_HOST", "localhost");
props.setProperty("DB_PORT", "3306");
props.setProperty("DB_USER", "root");
props.setProperty("DB_PASS", "p4ssw0rd");
登入後複製
登入後複製
登入後複製

迭代屬性

由於它是一個map類型的物件(雖然不建議使用HashTable方法),它有entrySet()方法,但是正如你所看到的,它是Object類型的,迭代所有屬性的替代方法是使用stringPropertyNames () 方法,此方法傳回一組包含所有屬性鍵的字串(傳回值不分先後)。

var API_URL = props.getProperty("API_URL");
System.out.println(API_URL);

// Output
null
登入後複製
登入後複製

顯示所有屬性的更快方法是使用 list(PrintStream out) 方法,該方法將所有屬性列印到作為參數傳遞的輸出流,例如 System.out。

var API_URL = props.getProperty("API_URL", "http://api.example.com");
System.out.println(API_URL);

// Output
http://api.example.com
登入後複製
登入後複製

將屬性儲存到文件

Properties 提供了store() 和storeToXML() 方法,以便屬性可以以properties (key=value) 格式和XML 格式儲存(這可以是如果這些屬性將分別在不同的環境中使用,則很有用)。不要使用 save() 方法,因為它已過時,並且不建議使用它,因為它在發生錯誤時不會拋出異常。

在將屬性儲存到檔案之前,我們可以執行以下操作,透過控制台驗證使用 store() 和 System.out 方法實際儲存的內容,以某種方式控制拋出的​​例外非常重要。

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
登入後複製

分析結果可以看到,第一行保存了作為第二個參數傳入的註解(是否為空字串沒關係,如果為null則不列印),在第二行保存保存屬性的日期和時間,從第三行開始,屬性以key=value.

格式儲存

如果使用storeToXML()方法,將會得到一個包含以下內容的檔案:

props.list(System.out);

// Output
-- listing properties --
DB_PORT=3306
DB_PASS=p4ssw0rd
DB_USER=root
DB_HOST=localhost
登入後複製

要將屬性儲存在名為 db.properties 的檔案中,您可以執行以下操作:

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
登入後複製

執行後,如果沒有拋出異常,你會看到在程式執行的目錄下創建了一個名為 db.properties 的文件,內容如下:

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>
登入後複製

要將屬性儲存為 XML 格式,只需將 store() 方法變更為 storeToXML()。

Properties props = new Properties();
登入後複製
登入後複製
登入後複製

從檔案載入屬性

假設某些屬性已修改或在db.properties 或db.properties.xml 檔案中新增了新屬性,以從兩個檔案之一載入屬性,在properties 或XML,可以分別使用load()和loadFromXML()方法。以某種方式控制在文件不存在或無法讀取時引發的異常非常重要。

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
登入後複製
登入後複製
屬性載入後,可以在控制台中顯示它們以驗證它們是否已正確載入。


var API_URL = props.getProperty("API_URL", "http://api.example.com");
System.out.println(API_URL);

// Output
http://api.example.com
登入後複製
登入後複製
結論

正如我們所見,Properties 類別允許我們以高效且簡單的方式處理屬性或配置文件,保存和讀取屬性,這在我們的 Java 應用程式中了解和使用很有趣。

以上是如何在Java中使用Properties類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!