欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中Properties配置類用法詳解

 更新時間:2023年06月19日 10:38:45   作者:一一哥Sun  
所謂的配置文件問題,是指我們在開發(fā)時,經(jīng)常需要讀取和修改一些配置信息,比如數(shù)據(jù)庫、消息隊列、Nginx、Web服務(wù)器等的配置,為了便于修改這些信息,我們可以采用Properties配置類,本文給大家講一下Properties配置類是怎么回事,以及怎么使用

一. Properties簡介

1. 概述

在Java開發(fā)中,我們經(jīng)常需要讀取和寫入配置文件,用來存儲程序中的一些配置信息,例如數(shù)據(jù)庫的連接信息、郵件和Web服務(wù)器的信息、消息隊列的信息等等。配置文件一般都是key-value形式,且它的key-value一般都是String-String類型的,因此我們完全可以用Map<String, String>來表示它。

但因為配置文件特別常用,所以Java集合庫給我們提供了一個Properties類來表示一組“配置”,專門用來處理key-value形式的配置信息。Properties類可以表示一個持久的屬性集,每個鍵及其對應(yīng)的值都是字符串類型,它可以把配置信息保存在一個IO流中,或是從一個IO流中加載配置信息,因此很適合用來處理配置文件。

Properties的內(nèi)部本質(zhì)上是一個Hashtable,該類從Hashtable中繼承了get()和put()方法,這些方法的參數(shù)簽名是Object。但由于歷史遺留原因,Properties的設(shè)計實際上是有問題的,不過為了保持兼容性,現(xiàn)在已經(jīng)沒法修改了。所以我們在使用Properties時,不要去調(diào)用這些從Hashtable繼承來的方法,而應(yīng)該使用Properties自身關(guān)于讀寫配置的方法,比如getProperty()和setProperty()等方法。

2. 配置文件

既然今天我們想利用Properties類來對配置文件進行讀取,所以首先我們得認(rèn)識一下什么是配置文件。在Java中,配置文件其實有多種格式,可以是 .txt、.xml、.properties、.yml、.json等格式,今天要給大家介紹的就是基于.properties格式的配置文件。

在Java中,其實默認(rèn)的配置文件就是以.properties為擴展名的,該文件中的每行信息都是以key=value表示的,并用#進行注釋。以下是一個典型的配置文件:

# db.properties
#數(shù)據(jù)庫的url
jdbc.url=jdbc:mysql://localhost:3306/mydb
#用戶名
jdbc.username=root
#密碼
jdbc.password=root

我們可以在eclipse等IDE工具中直接創(chuàng)建.properties文件,然后把上面的這些配置信息復(fù)制進去即可。

3. 常用方法

我們在使用Properties類讀寫配置文件時,常常會用到以下方法:

public synchronized void load(InputStream inStream) throws IOException
public synchronized void store(OutputStream out, String comments) throws IOException

其中,load()方法用于從指定的輸入流中讀取屬性列表(鍵和元素對),store()方法用于將Properties中的鍵值對存儲到指定的輸出流中。

4. 讀取步驟

在Java中利用Properties類讀取配置文件的信息,一般要經(jīng)歷如下三步:

創(chuàng)建 Properties 實例;

調(diào)用 load()方法 讀取配置文件;

調(diào)用 getProperty()方法 獲取具體的配置信息。

了解了以上這些內(nèi)容之后,接下來,會通過幾個例子來給大家詳細(xì)地介紹Properties的使用方法。

二. 讀寫Properties配置文件

首先我們通過一個案例,來學(xué)習(xí)如何讀取Properties配置文件里的信息。

1. 創(chuàng)建Properties文件

為了方便測試,我們可以先在項目中創(chuàng)建一個.properties的配置文件。這里就把該配置文件命名為db.properties了,如下圖所示:

大家要注意,在早期的JDK中, .properties配置 文件采用了ASCII編碼,具體來說是ISO8859-1編碼。在這種編碼中,如果文件中存在中文,這些中文必須使用user name=\u4e2d\u6587的形式來表示,非常別扭。而從JDK 9開始, .properties配置 文件就可以使用UTF-8編碼了。

由于load(InputStream)方法默認(rèn)總是以ASCII編碼來讀取字節(jié)流,所以會導(dǎo)致讀取信息時產(chǎn)生亂碼,我們可以使用另一個load(Reader)重載方法來讀?。?/p>

Properties props = new Properties();
props.load(new FileReader("db.properties", StandardCharsets.UTF_8));

InputStream是字節(jié)流,Reader是字符流,因為字符流在內(nèi)存中已經(jīng)以char類型表示了,所以不涉及到編碼問題。這樣通過以上代碼,我們就可以正常讀取包含中文的配置信息了。

2. 讀取Properties文件

2.1 加載配置文件

接下來我們可以使用Properties類的load()方法,來讀取上面創(chuàng)建的配置文件,例如:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;
/**
 * @author 一一哥Sun
 */
public class Demo23 {
    public static void main(String[] args) {
        //創(chuàng)建Properties對象
        Properties properties = new Properties();
        try {
            //設(shè)置db.properties配置文件,利用字節(jié)流來加載文件		
            //尋找.properties文件路徑方式一
            //從當(dāng)前項目的根目錄下尋找db.properties文件
            URL url = Demo23.class.getResource("/db.properties");
            String path = url.getPath();
            System.out.println("path="+path);
            InputStream inputStream = new FileInputStream(path);	
            //尋找.properties文件路徑方式二
            //InputStream inputStream = Demo23.class.getResourceAsStream("/db.properties");		
            //加載字節(jié)流
            properties.load(inputStream);
            System.out.println("properties="+properties);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在一個普通的Java項目中,如果我們想讀取.properties配置文件,可以有兩種方式:

類名.class.getResource("配置文件路徑及名稱") :該方式會得到一個URL對象,它代表了配置文件的路徑;

類名.class.getResourceAsStream("配置文件路徑及名稱") :該方式會直接得到InputStream對象。

在上面的代碼中,我們讀取到了名為db.properties的配置文件,并將其存儲在一個Properties對象中。

2.2 讀取配置信息

在上面的代碼中,我們從配置文件中讀取了三個鍵值對,分別是jdbc.url、jdbc.username和jdbc.password。在讀取配置文件后,接下來我們就可以通過getProperty()方法來獲取配置信息了。如果配置文件中不存在這些鍵,getProperty()方法將會返回null。

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;
/**
 * @author 一一哥Sun
 */
public class Demo23 {
    public static void main(String[] args) {
        //創(chuàng)建Properties對象
        Properties properties = new Properties();
        try {
            //設(shè)置db.properties配置文件,利用字節(jié)流來加載文件	
            //尋找.properties文件路徑方式一
            //從當(dāng)前項目的根目錄下尋找db.properties文件
            URL dbUrl = Demo23.class.getResource("/db.properties");
            String path = dbUrl.getPath();
            System.out.println("path="+path);
            InputStream inputStream = new FileInputStream(path);	
            //尋找.properties文件路徑方式二
            //InputStream inputStream = Demo23.class.getResourceAsStream("/db.properties");	
            //加載字節(jié)流
            properties.load(inputStream);
            System.out.println("properties="+properties);    
            //從配置文件中根據(jù)指定的key來讀取配置信息
            String url = properties.getProperty("jdbc.url");
            String username = properties.getProperty("jdbc.username");
            String password = properties.getProperty("jdbc.password");
            System.out.println("[url]="+url+" ,[username]="+username+" ,[password]="+password);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

要注意,我們在調(diào)用 getProperty()方法 獲取配置信息時,如果指定的key不存在,會返回 null 。但我們可以提供一個默認(rèn)值,這樣當(dāng)key不存在時會返回一個默認(rèn)值。 并且如果有多個.properties文件,可以反復(fù)調(diào)用load()讀取,后讀取的key-value會覆蓋已讀取的key-value。

2.3 使用默認(rèn)值讀取信息

在讀取配置文件時,如果某個鍵不存在,getProperty()方法將返回null。為了避免出現(xiàn)NullPointerException,我們可以為getProperty()方法指定一個默認(rèn)值,例如:

String url = properties.getProperty("jdbc.url", "jdbc:mysql://localhost:3306/mydb");
String username = properties.getProperty("jdbc.username", "root");
String password = properties.getProperty("jdbc.password", "root");

在以上代碼中,如果配置文件中不存在jdbc.url這個鍵,getProperty方法會返回我們設(shè)置的默認(rèn)值"jdbc:mysql://localhost:3306/mydb"。

3. 寫入Properties文件

接下來我們再通過一個案例,來學(xué)習(xí)如何把配置信息寫入到Properties文件里。

3.1 寫入配置文件

我們可以使用Properties類的store方法來寫入配置文件,例如:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.Properties;
/**
 * @author 
 */
public class Demo24 {
    public static void main(String[] args) {
        //設(shè)置配置信息
        Properties properties = new Properties();
        properties.setProperty("jdbc.url", "jdbc:mysql://localhost:3306/mydb2");
        properties.setProperty("jdbc.username", "root");
        properties.setProperty("jdbc.password", "syc");
        try {
            URL dbUrl = Demo24.class.getResource("/db.properties");
            String path = dbUrl.getPath();
            System.out.println("path="+path);
            OutputStream outputStream = new FileOutputStream(path);
            //寫入配置信息
            properties.store(outputStream, "Database connection properties");
            // 尋找.properties文件路徑方式二
            InputStream inputStream = Demo24.class.getResourceAsStream("/db.properties");
            // 加載字節(jié)流
            properties.load(inputStream);
            System.out.println("properties=" + properties);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以上代碼中,將三個鍵值對寫入到了名為db.properties的配置文件中,并添加了一行注釋“Database connection properties”。

3.2 使用默認(rèn)值寫入信息

另外在Properties類中,其實本身就有一個默認(rèn)的Properties對象,可以用來設(shè)置一些默認(rèn)屬性值。我們可以使用Properties類的getDefaultProperties()方法來獲取默認(rèn)的Properties對象,然后使用setProperty()方法來設(shè)置默認(rèn)屬性值,例如:

Properties defaultProperties = Properties.getDefaultProperties();
defaultProperties.setProperty("jdbc.url", "jdbc:mysql://localhost:3306/mydb");
defaultProperties.setProperty("jdbc.username", "root");
defaultProperties.setProperty("jdbc.password", "root");
Properties properties = new Properties(defaultProperties);

以上代碼中,我們先獲取了默認(rèn)的Properties對象,然后設(shè)置了jdbc.url、jdbc.username和jdbc.password三個默認(rèn)屬性值。接著,我們創(chuàng)建了一個新的Properties對象,并將默認(rèn)的Properties對象傳遞給它。這樣,在讀取配置文件時,如果某個鍵不存在,getProperty方法就會先在當(dāng)前Properties對象中查找,如果找不到,就會在默認(rèn)Properties對象中查找。

四. 讀寫XML配置文件

其實Properties類不僅可以操作.properties配置文件,也可以操作.xml格式的文件,接下來再給大家講一下如何操作xml文件。

1. 創(chuàng)建XML文件

首先我們來創(chuàng)建一個xml格式的配置文件,如下所示

<?xml version="1.0" encoding="UTF-8"?>
<!-- 聲明一個properties屬性節(jié)點 -->
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
  <entry key="jdbc.url">jdbc:mysql://localhost:3306/mydb</entry>
  <entry key="jdbc.username">root</entry>
  <entry key="jdbc.password">root</entry>
</properties>

大家要注意,這里我們要使用<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">語句來聲明一個properties根結(jié)點,大家可以根據(jù)自己的需要定義自己的節(jié)點名稱。

2. 讀取XML配置文件

要想讀取XML格式的配置文件,可以使用loadFromXML()方法從XML文件中讀取配置信息,例如:

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
 * @author 一一哥Sun
 */
public class Demo25 {
    public static void main(String[] args) {
        // 創(chuàng)建Properties對象
        Properties properties = new Properties();
        try {
            // 從當(dāng)前項目的根目錄下尋找db.properties文件
            InputStream inputStream = Demo25.class.getResourceAsStream("/config.xml");
            // 加載字節(jié)流,從XML文件中讀取配置信息
            properties.loadFromXML(inputStream);
            // 從配置文件中根據(jù)指定的key來讀取配置信息
            // 讀取信息時設(shè)置默認(rèn)值
            String url = properties.getProperty("jdbc.url","jdbc:mysql://localhost:3306/mydb2");
            String username = properties.getProperty("jdbc.username", "syc");
            String password = properties.getProperty("jdbc.password", "syc");
            System.out.println("[url]="+url+" ,[username]="+username+" ,[password]="+password);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以上代碼讀取了名為config.xml的XML配置文件,并將其存儲在一個Properties對象中。在讀取XML格式的配置文件后,我們就可以通過getProperty方法來獲取配置信息了。

3. 寫入XML配置文件

同時,我們也可以使用storeToXML()方法,將Properties中的鍵值對信息存儲到XML格式的輸出流中,例如:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.Properties;
/**
 * @author
 */
public class Demo26 {
    public static void main(String[] args) {
        // 設(shè)置配置信息
        Properties properties = new Properties();
        properties.setProperty("jdbc.url", "jdbc:mysql://localhost:3306/mydb2");
        properties.setProperty("jdbc.username", "root");
        properties.setProperty("jdbc.password", "syc");
        try {
            URL dbUrl = Demo26.class.getResource("/config.xml");
            String path = dbUrl.getPath();
            OutputStream outputStream = new FileOutputStream(path);
            // 寫入配置信息
            properties.storeToXML(outputStream, "Database connection properties");
            // 尋找.properties文件路徑方式二
            InputStream inputStream = Demo26.class.getResourceAsStream("/config.xml");
            // 加載字節(jié)流
            properties.loadFromXML(inputStream);
            System.out.println("xml=" + properties);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在以上代碼中,我們將三個鍵值對寫入了一個名為config.xml的XML配置文件中,并添加了一行注釋“Database connection properties”。

五. 結(jié)語

在本文中,為大家詳細(xì)介紹了Java中的Properties配置類,它是用來處理配置文件的一個實用工具類,該類可以從文件系統(tǒng)、classpath或其他任何地方讀取.properties文件。我們在讀寫Properties時,注意僅使用getProperty()和setProperty()方法,不要調(diào)用繼承而來的get()和put()等方法。

通過本文的介紹,相信大家已經(jīng)掌握了Properties類的基本用法,包括讀寫配置文件、設(shè)置默認(rèn)值、讀寫XML格式的配置文件等等。在實際開發(fā)中,我們可以結(jié)合Properties類來實現(xiàn)程序的配置功能,提高程序的靈活性和可維護性。

以上就是Java中Properties配置類用法詳解的詳細(xì)內(nèi)容,更多關(guān)于Java Properties配置類的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • spring boot集成rabbitmq的實例教程

    spring boot集成rabbitmq的實例教程

    這篇文章主要給大家介紹了關(guān)于spring boot集成rabbitmq的相關(guān)資料,springboot集成RabbitMQ非常簡單,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • JAVA使用ffmepg處理視頻的方法(壓縮,分片,合并)

    JAVA使用ffmepg處理視頻的方法(壓縮,分片,合并)

    這篇文章主要介紹了JAVA使用ffmepg處理視頻的方法,包括視頻壓縮分片合并功能,通過實例代碼講解的很詳細(xì),對java ffmepg處理視頻相關(guān)知識感興趣的朋友一起看看吧
    2021-05-05
  • SpringBoot簡單使用SpringData的jdbc和durid

    SpringBoot簡單使用SpringData的jdbc和durid

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著SpringBoot簡單使用SpringData的jdbc和durid,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java Swagger使用教程

    Java Swagger使用教程

    Swagger是一個規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 Restful 風(fēng)格的 Web 服務(wù)。總體目標(biāo)是使客戶端和文件系統(tǒng)作為服務(wù)器以同樣的速度來更新。文件的方法、參數(shù)和模型緊密集成到服務(wù)器端的代碼,允許API來始終保持同步
    2022-07-07
  • Java并發(fā)之異步的八種實現(xiàn)方式

    Java并發(fā)之異步的八種實現(xiàn)方式

    本文主要介紹了Java并發(fā)之異步的八種實現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 淺談Spring Boot 2.0遷移指南主要注意點

    淺談Spring Boot 2.0遷移指南主要注意點

    Spring官方的Spring Boot 2變動指南,主要是幫助您將應(yīng)用程序遷移到Spring Boot 2.0,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • drools中then部分的寫法(推薦)

    drools中then部分的寫法(推薦)

    本文介紹一下drools中then部分的寫法,以及一些內(nèi)置的方法,比如insert/delete/modify等等。同時也介紹一下rule的繼承,和在when中實現(xiàn)if else if?等操作,感興趣的朋友跟隨小編一起看看吧
    2022-05-05
  • java中“==“和equals()的區(qū)別詳解

    java中“==“和equals()的區(qū)別詳解

    這篇文章主要給大家介紹了關(guān)于java中“==“和equals()區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Java實現(xiàn)順序表的操作詳解

    Java實現(xiàn)順序表的操作詳解

    順序表是用一段物理地址連續(xù)的存儲單元依次存儲數(shù)據(jù)元素的線性結(jié)構(gòu),一般情況下采用數(shù)組存儲。本文主要介紹了順序表的實現(xiàn)與常用操作,需要的可以參考一下
    2022-09-09
  • springboot2.3 整合mybatis-plus 高級功能及用法詳解

    springboot2.3 整合mybatis-plus 高級功能及用法詳解

    這篇文章主要介紹了springboot2.3 整合mybatis-plus 高級功能,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09

最新評論