ResourceBundle读取文件学习

时间:2022-08-19 19:50:25

开发中,我们经常需要读取本地文件(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
 home=\u9759\u6D77  //因为默认是ISO-8859-1
game=\u4E5D\u9634

today_zh_CN.properties

 game=LOL
people=\u6211\u4EEC

today_en_US.properties

 ### www
today = \u5468\u4E94
backhome = \u54C8\u54C8\u54C8
1.如果不设置locale,是默认读取,默认读取顺序是: today_zh_CN.properties--------today.properties
 ResourceBundle读取文件学习

2..如果设置locale为"zh,CN",是默认读取,默认读取顺序是: today_zh_CN.properties--------today.properties

ResourceBundle读取文件学习

3.如果设置locale为"en,US",是默认读取,默认读取顺序是: today_en_US.properties--------today_zh_CN.properties----------today.properties

ResourceBundle读取文件学习

但是不知道为什么输出的是乱码,查了很多资料都尝试了也不行,如果有大佬知道请告诉我.

这是我对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根目录下,以及类包里面任何位置,但是如果配置文件路径是在除了源文件夹之外的其他文件夹中时,该方法是用不了的。