Java加載property文件配置過(guò)程解析
這篇文章主要介紹了java加載property文件配置過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
1 properties簡(jiǎn)介:
properties是一種文本文件,內(nèi)容格式為:
key = value #單行注釋
適合作為簡(jiǎn)單配置文件使用,通常作為參數(shù)配置、國(guó)際化資源文件使用。
對(duì)于復(fù)雜的配置,就需要使用XML、YML、JSON等了
2 java加載Properties:
java加載properties主要通過(guò)2個(gè)util包下的工具類(lèi): Properties類(lèi)、 ResourceBundle類(lèi)
2.1 通過(guò)Properties類(lèi)加載:
Properties類(lèi)通過(guò)load()方法加載配置信息,這個(gè)方法接收一個(gè)輸入流參數(shù):InputStream、Reader。
Properties提供get(String key) 方法讀取指定的配置項(xiàng)。
2.1.1 通過(guò)ClassLoader獲取InputStream加載:
該方式只能讀取類(lèi)路徑下的配置文件
(1)先創(chuàng)建Properties對(duì)象
(2)獲取property文件對(duì)應(yīng)的輸入流in
(3)使用Properties加載輸入流in
(4)通過(guò)Properties.get(key)方法獲取配置,如果配置信息不存在,則返回null
/** * 基于ClassLoader讀取properties; * 該方式只能讀取類(lèi)路徑下的配置文件,有局限但是如果配置文件在類(lèi)路徑下比較方便。 */ public static void method1() { System.out.println("使用ClassLoader方式加載properties"); Properties properties = new Properties(); /* * 使用ClassLoader加載properties配置文件生成對(duì)應(yīng)的輸入流。 * 使用此種方式,要求property文件必須要放在src目錄下,編譯之后會(huì)被放到class文件相同目錄下。 * 因?yàn)镃lassLoad的基礎(chǔ)路徑是相對(duì)于編譯后class文件所在目錄(可能是bin,classes),如果將properties放在項(xiàng)目根目錄下,使用此種方式可能會(huì)找不到 properties文件 */ //必須要以 /開(kāi)始 , 是在classes文件根目錄下尋找 InputStream in = PropertiesDemo.class.getResourceAsStream("/properties/a.properties"); System.out.println(PropertiesDemo.class.getClassLoader().getResource(".").getPath()); try { properties.load(in); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { closeResource(in); } System.out.println(properties.get("name")); System.out.println(properties.get("age")); }
2.1.2 通過(guò)構(gòu)建Reader加載:
該方式的優(yōu)點(diǎn)在于可以讀取任意路徑下的配置文件
(1)創(chuàng)建Properties對(duì)象
(2)創(chuàng)建一個(gè)Reader,可以指定路徑,不局限于類(lèi)路徑
(3)使用Properties加載Reader
(4)Properties.get(key)方法讀取配置
/** * 使用inputStream讀取配置文件 * 該方式的優(yōu)點(diǎn)在于可以讀取任意路徑下的配置文件 */ public static void method2() { System.out.println("使用InputStream方式加載properties"); Properties properties = new Properties(); BufferedReader reader = null; try { /* * System.getProperty("user.dir"): 獲取項(xiàng)目根路徑, 而后附加配置文件的路徑 */ reader = new BufferedReader(new FileReader(System.getProperty("user.dir") + "/properties/a.properties")); properties.load(reader); System.out.println(properties.get("name")); System.out.println(properties.get("age")); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { closeResource(reader); } }
2.2 通過(guò)ResourceBundle類(lèi)加載:
ResourceBundle讀取配置有2種方式:
(1)指定文件路徑 :相對(duì)于src、classes的相對(duì)路徑
(2)提供InputStream
ResourceBundle提供方法getString(key) 和 getObject(key)讀取配置項(xiàng)
使用路徑加載,不需要指定文件后綴名,且不需要手動(dòng)關(guān)閉相關(guān)資源,比Properties類(lèi)操作要簡(jiǎn)單。
/** * 通過(guò)ResourceBundle 讀取配置, 此種方式項(xiàng)目Properties要簡(jiǎn)單 * ResourceBundle讀取配置有2種方式: (1)指定文件路徑 (2)提供InputStream */ public static void method3() { System.out.println("使用ResourceBundle方式加載properties"); /* * (1)直接指定文件路徑: * 可以使用相對(duì)路徑,從類(lèi)路徑開(kāi)始,且不需要指定properties文件的后綴 */ ResourceBundle resource = ResourceBundle.getBundle("properties/b"); System.out.println(resource.getString("name")); System.out.println(resource.getString("age")); try { /* * (2)通過(guò)InputStream加載配置: * 通過(guò)當(dāng)前類(lèi)的class實(shí)例,獲取資源輸入流 */ resource = new PropertyResourceBundle(PropertiesDemo.class.getResourceAsStream("/properties/a.properties")); System.out.println(resource.getString("name")); System.out.println(resource.getString("age")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- java property配置文件管理工具框架過(guò)程詳解
- Java Property類(lèi)使用詳解
- Mybatis單個(gè)參數(shù)的if判斷報(bào)異常There is no getter for property named ''xxx'' in ''class java.lang.Integer''的解決方案
- Java使用application.property讀取文件里面的值
- 詳解java中的PropertyChangeSupport與PropertyChangeListener
- Java通過(guò)PropertyDescriptor反射調(diào)用set和get方法
- Java的System.getProperty()方法獲取大全
- JSP JavaBean的setProperty屬性
相關(guān)文章
擴(kuò)展tk.mybatis的流式查詢(xún)功能實(shí)現(xiàn)
mybatis查詢(xún)默認(rèn)是一次獲取全部,如果數(shù)據(jù)過(guò)于龐大,就會(huì)導(dǎo)致OOM問(wèn)題,本文就介紹了tk.mybatis 流式查詢(xún),具有一定的參考價(jià)值,感興趣的可以了解一下2021-12-12IntelliJ IDEA使用maven實(shí)現(xiàn)tomcat的熱部署
這篇文章主要介紹了IntelliJ IDEA使用maven實(shí)現(xiàn)tomcat的熱部署,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07request.getRequestURL()等方法得到路徑的區(qū)別及說(shuō)明
這篇文章主要介紹了request.getRequestURL()等方法得到路徑的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12SpringMVC 域?qū)ο蠊蚕頂?shù)據(jù)的實(shí)現(xiàn)示例
本文主要介紹了SpringMVC 域?qū)ο蠊蚕頂?shù)據(jù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08mybatis Mapper的xml文件中resultType值的使用說(shuō)明
這篇文章主要介紹了mybatis Mapper的xml文件中resultType值的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Java解析http協(xié)議字符串的方法實(shí)現(xiàn)
本文主要介紹了Java解析http協(xié)議字符串的方法實(shí)現(xiàn),我們探討了如何使用Java解析HTTP協(xié)議字符串,并將其封裝成了一個(gè)HttpRequest類(lèi),具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09