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

  • 相关阅读:
    poj 2676 Suduku (dfs)
    poj 1562 Oil Deposits (dfs)
    poj 2907 Collecting Beepers (dfs)
    poj 1655 Balancing Act (树形dfs)
    poj 3411 Paid Roads (dfs)
    hdu 2896 病毒侵袭 (AC)
    hdu 3065 病毒侵袭持续中 (AC)
    poj 2251 Dungeon Master (bfs)
    java中debug使用
    Swing入门级小项目总结
  • 原文地址:https://www.cnblogs.com/DiZhang/p/12545045.html
Copyright © 2011-2022 走看看