• 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=u9759u6D77  //因为默认是ISO-8859-1
    2 game=u4E5Du9634

    today_zh_CN.properties

    1 game=LOL
    2 people=u6211u4EEC

    today_en_US.properties

    1 ### www 
    2 today = u5468u4E94
    3 backhome = u54C8u54C8u54C8
    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根目录下,以及类包里面任何位置,但是如果配置文件路径是在除了源文件夹之外的其他文件夹中时,该方法是用不了的。

  • 相关阅读:
    一个很好的Delphi博客
    Android开发之adb无法连接
    J2EE--常见面试题总结 -- (二)
    J2EE--常见面试题总结 -- ( 一)
    面向接口编程实现不改代码实现Redis单机/集群之间的切换
    Gradle sync failed 异常
    Dubbo+Zookeeper
    JdbcTemplate的使用
    Spring -- 配置bean
    浅析 @PathVariable 和 @RequestParam(转发,非原创)
  • 原文地址:https://www.cnblogs.com/daweige/p/7890712.html
Copyright © 2020-2023  润新知