zoukankan      html  css  js  c++  java
  • ResourceBundle来读取配置文件及路径问题

    1.当配置文件在classpath下时:
    使用ResourceBundle读取配置文件,默认要把配置文件放在classpath下(默认的src目录下);property.properties和protest.properties :

    #protest.properties#
    welcome=Hello World
    #property.properties#
    name=demacia
    value=100
    package test1;
    
    import java.util.Locale;
    import java.util.ResourceBundle;
    
    /**
     * @author zd
     *  src路径下的文件在编译后会放到WEB-INF/clases路径下(默认的classpath)
     *  直接放到WEB-INF下的话,是不在classpath下的。
     */
    public class TestResourceBundle {
    
        public static final String PROPERTIES_FILE_NAME = "property";
        public static final String MY_NAME_KEY = "name";
        public static final String MY_VALUE_KEY = "value";
    
        private static String myName;
        private static String myValue;
        static {
            try {
                ResourceBundle bundle = ResourceBundle.getBundle(PROPERTIES_FILE_NAME, Locale.ENGLISH);
                myName = bundle.getString(MY_NAME_KEY).trim();
                myValue = bundle.getString(MY_VALUE_KEY).trim();
            } catch (Exception ex) {
                System.err.println("[Property]:Can't Load property.properties");
            }
        }
    
        public void print() {
            System.out.println("My name is: " + myName);
            System.out.println("My value is: " + myValue);
        }
    
        public static void main(String[] args) {
            //读取property.properties
            TestResourceBundle trb = new  TestResourceBundle();
            trb.print();
            //读取protest.properties
            ResourceBundle rb = ResourceBundle.getBundle("protest");
            System.out.println(rb.getString("welcome"));
            //读取prop_en.properties
            ResourceBundle rb_prop = ResourceBundle.getBundle("prop", Locale.ENGLISH);
            System.out.println(rb_prop.getString("file_name"));
    
        }
    }
    
    1. 如果想把配置文件从src分离,可以新建一个src平级的文件夹config;书写prop_en.properties;
    #prop_en.properties#
    file_name=u6211u65F6u8FB0u8BB8

    此时,如果想读取config下的配置文件,只需要让config下的输出也指定为何src一样的输出目录就可以了;右键config–〉buildpath–〉java build path –〉source 下新建folder:config,确定(此时src和config的default output folder 同为项目名/bin目录
    备注:
    1.src不是classpath, WEB-INF/classes,lib才是classpath,WEB-INF/ 是资源目录, 客户端不能直接访问。
    WEB-INF/classes目录存放src目录java文件编译之后的class文件,xml、properties等资源配置文件,这是一个定位资源的入口。
    引用classpath路径下的文件,只需在文件名前加classpath:

    <param-value>classpath:applicationContext-*.xml</param-value> 
    <!-- 引用其子目录下的文件,如 -->
    <param-value>classpath:context/conf/controller.xml</param-value>
    

    lib和classes同属classpath,两者的访问优先级为: lib>classes。
    classpath 和 classpath* 区别:
    classpath:只会到你的class路径中查找找文件;
    classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找。

    2.
    命名规则按照:资源名+语言国别.properties

    ResourceBundle bundle = ResourceBundle.getBundle("res", new Locale("zh", "CN"));  

    其中new Locale(“zh”, “CN”);这个对象就告诉了程序你的本地化信息,就拿这个来说吧:程序首先会去classpath下寻找res_zh_CN.properties;若不存在,那么会去找res_zh.properties,若还是不存在,则会去寻找res.properties,要还是找不到的话,那么就该抛异常了:MissingResourceException.

    参考:https://blog.csdn.net/haiyan0106/article/details/2257725

  • 相关阅读:
    c++错误:不允许使用抽象类类型 "Employee" 的对象
    C++ error C2027:使用了未定义类型 类的调用顺序
    PyCharm 2020.1 激活教程
    mysql组内排序
    XGBoost
    React学习——Hello, React
    Lambda表达式
    plsql链接远程oracle服务器,以及常用配置
    静态网站 H5 跳小程序 (短信跳小程序)
    更新(D-U-N-S)邓白氏码公司信息(注册勿看)
  • 原文地址:https://www.cnblogs.com/DiZhang/p/12545046.html
Copyright © 2011-2022 走看看