ResourceBundle讀取文件學習


開發中,我們經常需要讀取本地文件(properties文件),這樣的好處是文件是動態的,可配置的.這時候我們就需要用到ResourceBundle這個類.

這個類屬於java.util.*.

這個類的好處:

  • 輕松本地化並或者翻譯成不同的語言   博主理解:用locale可以選擇文件名相同,但是語言代碼和國別代碼不同的文件.(文件名_語言代碼_國別代碼.properties).
  • 文件可以輕松修改

說白了,這個類的作用就是讀取資源屬性文件(properties),然后根據.properties文件的名稱信息(本地化信息),匹配當前系統的國別語言信息(也可以程序指定),然后獲取相應的properties文件的內容。

要注意的一點是,這個properties文件的名字是有規范的:一般的命名規范是: 自定義名_語言代碼_國別代碼.properties

如果是默認的,直接寫為: 自定義名.properties
比如:
today_en_US.properties
today_zh_CN.properties
today.properties
值得我們注意的是資源屬性文件(properties)必須放在src根目錄下或者自己配置的classpath下.
下面用代碼展示他們的讀取順序
首先附上我的資源文件
today.properties
 
1 home=\u9759\u6D77  //因為默認是ISO-8859-1
2 game=\u4E5D\u9634

today_zh_CN.properties

1 game=LOL
2 people=\u6211\u4EEC

today_en_US.properties

1 ### www 
2 today = \u5468\u4E94
3 backhome = \u54C8\u54C8\u54C8

 

1.如果不設置locale,是默認讀取,默認讀取順序是: today_zh_CN.properties--------today.properties
 

 2..如果設置locale為"zh,CN",是默認讀取,默認讀取順序是: today_zh_CN.properties--------today.properties

3.如果設置locale為"en,US",是默認讀取,默認讀取順序是: today_en_US.properties--------today_zh_CN.properties----------today.properties

但是不知道為什么輸出的是亂碼,查了很多資料都嘗試了也不行,如果有大佬知道請告訴我.

這是我對ResourceBundle讀取資源文件(proterties)的一些理解,如果你有更好的理解或者我有錯誤請及時告訴我,謝啦.

補充:

Java中的getResourceAsStream有以下幾種:

1. Class.getResourceAsStream(String path) : path 不以’/'開頭時默認是從此類所在的包下取資源,以’/'開頭則是從ClassPath根下獲取。其只是通過path構造一個絕對路徑,最終還是由ClassLoader獲取資源。
2. Class.getClassLoader.getResourceAsStream(String path) :默認則是從ClassPath根下獲取,path不能以’/'開頭,最終是由ClassLoader獲取資源。
3. ServletContext. getResourceAsStream(String path):默認從WebAPP根目錄下取資源,Tomcat下path是否以’/'開頭無所謂,當然這和具體的容器實現有關。
4. Jsp下的application內置對象就是上面的ServletContext的一種實現。


getResourceAsStream 用法大致有以下幾種:
第一: 要加載的文件和.class文件在同一目錄下,例如:com.x.y 下有類me.class ,同時有資源文件myfile.xml
那么,應該有如下代碼:
me.class.getResourceAsStream("myfile.xml");
第二:在me.class目錄的子目錄下,例如:com.x.y 下有類me.class ,同時在 com.x.y.file 目錄下有資源文件myfile.xml
那么,應該有如下代碼:
me.class.getResourceAsStream("file/myfile.xml");
第三:不在me.class目錄下,也不在子目錄下,例如:com.x.y 下有類me.class ,同時在 com.x.file 目錄下有資源文件myfile.xml
那么,應該有如下代碼:
me.class.getResourceAsStream("/com/x/file/myfile.xml");


總結一下,可能只是兩種寫法
第一:前面有 “   / ”
“ / ”代表了工程的根目錄,例如工程名叫做myproject,“ / ”代表了myproject
me.class.getResourceAsStream("/com/x/file/myfile.xml");
第二:前面沒有 “   / ”
代表當前類的目錄
me.class.getResourceAsStream("myfile.xml");
me.class.getResourceAsStream("file/myfile.xml");
最后,自己的理解:
getResourceAsStream讀取的文件路徑只局限與工程的源文件夾中,包括在工程src根目錄下,以及類包里面任何位置,但是如果配置文件路徑是在除了源文件夾之外的其他文件夾中時,該方法是用不了的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM