最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Properties讀取配置文件的示例詳解

 更新時(shí)間:2023年06月26日 10:17:05   作者:東方甲乙木土  
開發(fā)SpringBoot項(xiàng)目時(shí),使用配置文件配置項(xiàng)目相關(guān)屬性是必不可少的,所以下文為大家準(zhǔn)備了使用Properties讀取配置文件的示例代碼,希望對大家有所幫助

1. 配置文件信息

1.1 項(xiàng)目默認(rèn)配置文件

開發(fā)SpringBoot項(xiàng)目時(shí),使用配置文件配置項(xiàng)目相關(guān)屬性是必不可少的,SpringBoot也為我們提供了一些默認(rèn)的配置文件格式。

  • application.properties,以鍵值對的方式配置屬性值
  • application.yml:以數(shù)據(jù)對象的方式配置屬性值

配置文件存放位置:src/resource/

按照SpringBoot給定的格式和位置創(chuàng)建文件并定義相關(guān)屬性值后,SpringBoot項(xiàng)目會(huì)在啟動(dòng)時(shí)自動(dòng)加載屬性值。

1.2 自定義配置文件

除了官方指定的配置文件,我們還可以自定義一個(gè)配置文件,并在合適的時(shí)候使用其中的配置信息,如db.properties、jdbc.properties、mybatis.properties。

但是由于SpringBoot對application.properties配置文件的自動(dòng)加載,大部分的屬性定義都可以在主配置文件中完成了,并使用@value等方法獲取配置內(nèi)容。

但是如果我們需要將一系列相關(guān)配置放在一個(gè)單獨(dú)的.properties文件中,這種情況下如何在項(xiàng)目中加載配置文件并讀取其中內(nèi)容呢?這個(gè)時(shí)候就需要Properties出場了。

2. Properties

2.1 認(rèn)識(shí)Properties類

Properties類對應(yīng)SpringBoot中的application.properties文件,定義為一系列屬性的集合,可以從流中讀取屬性或?qū)傩员4娴搅髦?,且屬性中值都是字符串格式?/p>

Properties類作為一個(gè)集合,繼承了Hashaable類,因此是線程安全的。

class Properties extends Hashtable<Object,Object>{
 ?  ...
 ? ?public Properties() {
 ? ? ? ?this(null);
 ?  }
 ?  ...
}

Properties初始化實(shí)例時(shí)也比較簡單,只需要使用new關(guān)鍵字調(diào)用類的無參構(gòu)造方法創(chuàng)建對象即可。

Properties properties = new Properties();

2.2 讀取流

Properties類中提供了load()方法來讀取流中的內(nèi)容,創(chuàng)建對象后,調(diào)用對象的load()方法,并提供字節(jié)流作為參數(shù),就可以讀取字節(jié)中屬性內(nèi)容。

簡要的讀取流程可以描述為:

  • 創(chuàng)建Properties類對象
  • 使用對象的load()方法讀取流文件
  • 對象中讀取屬性數(shù)據(jù)后,使用getProperty()方法獲取屬性值

根據(jù)方法參數(shù)的不同,Properties中定義了兩個(gè)同名的load()方法,兩種方法本質(zhì)上都是調(diào)用了內(nèi)部的load0()方法,用來從字節(jié)流中獲取數(shù)據(jù)內(nèi)容。

//以Reader對象作為參數(shù)讀取
public synchronized void load(Reader reader) throws IOException {
 ? ?load0(new LineReader(reader));
}
?
//以InputStream作為參數(shù)讀取
public synchronized void load(InputStream inStream) throws IOException {
 ? ?load0(new LineReader(inStream));
}

讀取到配置文件后,Properties對象還提供了getProperty(String key)方法來獲取指定屬性的值,如果在配置中當(dāng)前屬性不存在,則返回null值;

或者使用另一個(gè)getProperty(String key, String defaultValue)方法在獲取屬性時(shí)指定一個(gè)默認(rèn)值,如果屬性不存在則使用指定值代替null。

//獲取key對應(yīng)值,如果key不存在,則返回null
public String getProperty(String key) {
 ? ?Object oval = super.get(key);
 ? ?String sval = (oval instanceof String) ? (String)oval : null;
 ? ?return ((sval == null) && (defaults != null)) ? defaults.getProperty(key) : sval;
}
?
//如果不存在key,則返回defaultValue
public String getProperty(String key, String defaultValue) {
 ? ?String val = getProperty(key);
 ? ?return (val == null) ? defaultValue : val;
}

2.3 輸出到流

使用Properties對象將屬性輸出到字節(jié)流中的流程可以表示為:

  • 實(shí)例化一個(gè)Properties對象,
  • Properties對象使用setProperty()方法設(shè)置屬性和值,
  • 調(diào)用對象的store()方法將對象通過字節(jié)流保存到相應(yīng)文件。

對應(yīng)的方法定義有:

//設(shè)置屬性,本質(zhì)是Hashtable的put方法
public synchronized Object setProperty(String key, String value) {
 ? ?return put(key, value);
}
?
//輸出為字符流對象Writer
public void store(Writer writer, String comments)
 ? ? ? ?throws IOException
{
 ? ?store0((writer instanceof BufferedWriter)?(BufferedWriter)writer
 ? ? ? ? ? : new BufferedWriter(writer),
 ? ? ? ? ? comments,
 ? ? ? ? ? false);
}
?
//輸出為OutputStream流
public void store(OutputStream流 out, String comments)
 ? ? ? ?throws IOException
{
 ? ?store0(new BufferedWriter(new OutputStreamWriter(out, "8859_1")),
 ? ? ? ? ? comments,
 ? ? ? ? ? true);
}

3. 讀取配置文件的幾種方式

了解Properties讀取文件的流程后,來看一下實(shí)際在項(xiàng)目中讀取自定義配置文件內(nèi)容的方式都有哪些。

1.類的getResourceAsStream方法

//類的getResourceAsStream方法,路徑加"/"時(shí)代表讀取resources目錄下內(nèi)容
InputStream inputStream = PropertiesUtils.class.getResourceAsStream方法,路徑加"/"時(shí)代表讀取resources目錄下內(nèi)容("/test.properties");
Properties properties = new Properties();
properties.load(inputStream);
System.out.println(properties.getProperty("test.content"));

2.類啟動(dòng)器的getResourceAsStream方法

//類啟動(dòng)器的getResourceAsStream方法,默認(rèn)獲取路徑為src/resources下的文件
InputStream inputStream = PropertiesUtils.class.getClassLoader().getResourceAsStream("test.properties");
Properties properties = new Properties();
properties.load(inputStream);
System.out.println(properties.getProperty("test.content"));

3.PropertiesLoaderUtils工具類的loadAllProperties()方法

// PropertiesLoaderUtils類的loadAllProperties()方法,讀取resources目錄
Properties properties = PropertiesLoaderUtils.loadAllProperties("test.properties");
System.out.println(properties.getProperty("test.content"));

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

相關(guān)文章

  • java 算法 6種排序小結(jié)

    java 算法 6種排序小結(jié)

    這篇文章主要介紹了java 算法 6種排序,排序原理及實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • 使用maven打包/跳過某個(gè)modules

    使用maven打包/跳過某個(gè)modules

    本文總結(jié)了在Maven項(xiàng)目中跳過或單獨(dú)構(gòu)建模塊的方法,包括使用`-pl`、`-am`和`-amd`參數(shù)來選擇性地執(zhí)行模塊構(gòu)建,以及通過`-Dmaven.test.skip`跳過測試,以提高構(gòu)建效率
    2024-12-12
  • JAVA實(shí)現(xiàn)PDF轉(zhuǎn)HTML文檔的示例代碼

    JAVA實(shí)現(xiàn)PDF轉(zhuǎn)HTML文檔的示例代碼

    本文是基于PDF文檔轉(zhuǎn)PNG圖片,然后進(jìn)行圖片拼接,拼接后的圖片轉(zhuǎn)為base64字符串,然后拼接html文檔寫入html文件實(shí)現(xiàn)PDF文檔轉(zhuǎn)HTML文檔,感興趣的可以了解一下
    2021-05-05
  • SpringBoot封裝自己的Starter的實(shí)現(xiàn)方法

    SpringBoot封裝自己的Starter的實(shí)現(xiàn)方法

    這篇文章主要介紹了SpringBoot封裝自己的Starter的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-04-04
  • Mybatis Select Count(*)的返回值類型介紹

    Mybatis Select Count(*)的返回值類型介紹

    這篇文章主要介紹了Mybatis Select Count(*)的返回值類型,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 詳解Spring中實(shí)現(xiàn)接口動(dòng)態(tài)的解決方法

    詳解Spring中實(shí)現(xiàn)接口動(dòng)態(tài)的解決方法

    最近在工作遇到的一個(gè),發(fā)現(xiàn)網(wǎng)上的資料較少,所以想著總結(jié)分享下,下面這篇文章主要給大家介紹了關(guān)于Spring中實(shí)現(xiàn)接口動(dòng)態(tài)的解決方法,文中通過完整的示例代碼給大家介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-07-07
  • Java Redis Redisson配置教程詳解

    Java Redis Redisson配置教程詳解

    這篇文章主要介紹了Java Redis Redisson配置教程,包括Session共享配置及其他Redisson的Config配置方式,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • Java實(shí)現(xiàn)蘿卜勇者游戲的示例代碼

    Java實(shí)現(xiàn)蘿卜勇者游戲的示例代碼

    《蘿卜勇者》是由國內(nèi)玩家自制的一款獨(dú)立游戲,玩家扮演蘿卜勇士闖關(guān),打敗各種邪惡的敵人,獲得最后的勝利。本文將利用Java實(shí)現(xiàn)這一游戲,感興趣的可以了解一下
    2022-02-02
  • SpringBoot訪問接口自動(dòng)跳轉(zhuǎn)login頁面的問題及解決

    SpringBoot訪問接口自動(dòng)跳轉(zhuǎn)login頁面的問題及解決

    這篇文章主要介紹了SpringBoot訪問接口自動(dòng)跳轉(zhuǎn)login頁面的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Hashmap非線程安全關(guān)于hash值沖突處理

    Hashmap非線程安全關(guān)于hash值沖突處理

    這篇文章主要為大家介紹了Hashmap非線程安全關(guān)于hash值沖突的處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04

最新評論

丹棱县| 安远县| 双流县| 岫岩| 新晃| 江陵县| 东至县| 柏乡县| 新沂市| 庐江县| 肃南| 宜良县| 扶风县| 嘉义市| 泸定县| 九寨沟县| 桂阳县| 浦县| 邵阳县| 遂川县| 晋州市| 达孜县| 光泽县| 福贡县| 宁国市| 淮滨县| 石屏县| 巴楚县| 张家川| 高雄县| 四子王旗| 永兴县| 托克托县| 赤城县| 资源县| 台中市| 河北区| 怀来县| 鄂温| 灌南县| 阜城县|