ResourceBundle来读取配置文件及路径问题

欢迎加入ifast 交流群,

群聊号码:746358408 ,

关注的朋友请加群,博客留言信息不带回哈

 

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"));

    }
}

如果想把配置文件从src分离,可以新建一个src平级的文件夹config;书写prop_en.properties;
#prop_en.properties#
file_name=\u6211\u65F6\u8FB0\u8BB8
1
2
此时,如果想读取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>
1
2
3
4
lib和classes同属classpath,两者的访问优先级为: lib>classes。 
classpath 和 classpath* 区别: 
classpath:只会到你的class路径中查找找文件; 
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找。

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

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

参考:https://blog.csdn.net/haiyan0106/article/details/2257725
--------------------- 
作者:Ryze丶 
来源:CSDN 
原文:https://blog.csdn.net/shelleylittlehero/article/details/79669489 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值