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

  • 相关阅读:
    042.hiveLEFT SEMI JOIN 、 left anti join、inner join、full join
    032.hive rollup 、 with cube 、 grouping sets
    023.linuxshell抽取文本中某几行插入到另一个文
    041.mysql查询mysql元数据来格式化datax同步脚本,查询语句、拼接的json语句dataxmysql到hive
    33.hivecollect_set组合数组(数组内去重) 、array_contains 判断数组内是否又某个值返回布尔类型、concat_ws
    vue vant组件库 card组件 修改 thumb属性的图片 参数后不及时刷新解决
    idea 警告 The IDE is running low on memory and this might affect performance. Please consider increasing available heap. 解决
    尺子控件WinForm控件开发系列
    自定义形状按钮WinForm控件开发系列
    code ERESOLVE, ERESOLVE could not resolve
  • 原文地址:https://www.cnblogs.com/daweige/p/7890712.html
Copyright © 2020-2023  润新知