Java代碼讀取properties配置文件的示例代碼
讀取properties配置文件
package com.easycrud.utils; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import java.util.Map; import java.util.Properties; import java.util.concurrent.ConcurrentHashMap; /** * @BelongsProject: EasyCrud * @BelongsPackage: com.easycrud.utils * @Author: xpx * @Email: 2436846019@qq.com * @CreateTime: 2023-05-02 16:05 * @Description: 讀取properties配置文件工具類 * @Version: 1.0 */ public class PropertiesUtils { private static Properties props = new Properties(); private static Map<String,String> PROPER_MAP = new ConcurrentHashMap<String, String>(); /** * 項(xiàng)目初始化時(shí)就去讀取配置文件 */ static { InputStream is = null; try{ is = PropertiesUtils.class.getClassLoader().getResourceAsStream("application.properties"); props.load(is); Iterator<Object> iterator = props.keySet().iterator(); while (iterator.hasNext()){ String key = (String) iterator.next(); PROPER_MAP.put(key,props.getProperty(key)); } }catch (Exception e){ }finally { if (is != null){ try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 對(duì)外提供方法通過(guò)key取值 * @param key * @return */ public static String getString(String key) { return PROPER_MAP.get(key); } /** * 測(cè)試能否成功取值 * @param args */ public static void main(String[] args) { System.out.println("測(cè)試打?。?+getString("db.driver.name")); } }
新手引導(dǎo)
Properties
Properties 繼承于 Hashtable。表示一個(gè)持久的屬性集.屬性列表中每個(gè)鍵及其對(duì)應(yīng)值都是一個(gè)字符串。
ConcurrentHashMap
HashTable是一個(gè)線程安全的類,它使用synchronized來(lái)鎖住整張Hash表來(lái)實(shí)現(xiàn)線程安全,即每次鎖住整張表讓線程獨(dú)占,相當(dāng)于所有線程進(jìn)行讀寫(xiě)時(shí)都去競(jìng)爭(zhēng)一把鎖,導(dǎo)致效率非常低下。ConcurrentHashMap可以做到讀取數(shù)據(jù)不加鎖,并且其內(nèi)部的結(jié)構(gòu)可以讓其在進(jìn)行寫(xiě)操作的時(shí)候能夠?qū)㈡i的粒度保持地盡量地小,允許多個(gè)修改操作并發(fā)進(jìn)行,其關(guān)鍵在于使用了鎖分段技術(shù)。它使用了多個(gè)鎖來(lái)控制對(duì)hash表的不同部分進(jìn)行的修改。對(duì)于JDK1.7版本的實(shí)現(xiàn), ConcurrentHashMap內(nèi)部使用段(Segment)來(lái)表示這些不同的部分,每個(gè)段其實(shí)就是一個(gè)小的Hashtable,它們有自己的鎖。只要多個(gè)修改操作發(fā)生在不同的段上,它們就可以并發(fā)進(jìn)行。JDK1.8的實(shí)現(xiàn)降低鎖的粒度,JDK1.7版本鎖的粒度是基于Segment的,包含多個(gè)HashEntry,而JDK1.8鎖的粒度就是HashEntry(首節(jié)點(diǎn))。
static
static代碼塊一般用于初始化類中的靜態(tài)變量,該靜態(tài)代碼塊在類加載過(guò)程中的初始化階段執(zhí)行,并且只執(zhí)行一次。
InputStream
字節(jié)輸入流。
try...cache...finally
try{
? 可能發(fā)生異常的代碼
}catch(可能發(fā)生的異常類型 異常對(duì)象名){
? 當(dāng)前異常類型的處理方式
}finally{
? 一定要執(zhí)行的代碼
}
IOException
IOException 是在使用流、文件和目錄訪問(wèn)信息時(shí)引發(fā)的異常的基類
e.printStackTrace()
在命令行打印異常信息在程序中出錯(cuò)的位置及原因。
Class.getClassLoader().getResourceAsStream()
Class是當(dāng)前類的Class對(duì)象,Class.getClassLoader()是獲取當(dāng)前類的類加載器。類加載器的大概作用是當(dāng)需要使用一個(gè)類時(shí),加載該類的".class"文件,并創(chuàng)建對(duì)應(yīng)的class對(duì)象,將class文件加載到虛擬機(jī)的內(nèi)存。getResourceAsStream()是獲取資源的輸入流。類加載器默認(rèn)是從classPath路徑加載資源。
load()
Properties的方法是逐行讀取properties配置文件,分隔成兩個(gè)字符串key和value,將他們放進(jìn)Properties對(duì)象中。
Iterator
迭代器 it 的三個(gè)基本操作是 next 、hasNext 和 remove。
調(diào)用 it.next() 會(huì)返回迭代器的下一個(gè)元素,并且更新迭代器的狀態(tài)。
調(diào)用 it.hasNext() 用于檢測(cè)集合中是否還有元素。
調(diào)用 it.remove() 將迭代器返回的元素刪除。
keySet()
如果有一個(gè)Map對(duì)象,可以使用 map.keySet()方法獲取所有的key值。
A=xxx.iterator()
獲取迭代器保存在A中。
到此這篇關(guān)于Java代碼讀取properties配置文件的文章就介紹到這了,更多相關(guān)Java讀取properties文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java實(shí)現(xiàn)文件和base64相互轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了java如何實(shí)現(xiàn)文件和base64相互轉(zhuǎn)換,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11詳解SpringBoot Redis自適應(yīng)配置(Cluster Standalone Sentinel)
這篇文章主要介紹了詳解SpringBoot Redis自適應(yīng)配置(Cluster Standalone Sentinel),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07SpringMVC結(jié)合ajaxfileupload實(shí)現(xiàn)文件無(wú)刷新上傳代碼
本篇文章主要介紹了SpringMVC結(jié)合ajaxfileupload實(shí)現(xiàn)文件無(wú)刷新上傳,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04idea2020.1.3 手把手教你創(chuàng)建web項(xiàng)目的方法步驟
這篇文章主要介紹了idea 2020.1.3 手把手教你創(chuàng)建web項(xiàng)目的方法步驟,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08java實(shí)現(xiàn)利用String類的簡(jiǎn)單方法讀取xml文件中某個(gè)標(biāo)簽中的內(nèi)容
下面小編就為大家?guī)?lái)一篇java實(shí)現(xiàn)利用String類的簡(jiǎn)單方法讀取xml文件中某個(gè)標(biāo)簽中的內(nèi)容。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12Spring?Security?OAuth?Client配置加載源碼解析
這篇文章主要為大家介紹了Spring?Security?OAuth?Client配置加載源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07jdbc鏈接遠(yuǎn)程數(shù)據(jù)庫(kù)進(jìn)行修改url操作
這篇文章主要為大家詳細(xì)介紹了jdbc鏈接遠(yuǎn)程數(shù)據(jù)庫(kù)進(jìn)行修改url操作,感興趣的小伙伴們可以參考一下2016-06-06