关于ResourceBundle和PropertyResourceBundle

昨天一个项目,是我的前任发布到服务器上的,有个模块,一直没用到,所以也一直没有看出问题来。直到昨天要用到这个项目的时候,突然报错:
 
java.util.MissingResourceException: Can't find bundle for base name config/para, locale en_US
 
一看代码,这行代码是这么写的:
 
PropertyResourceBundle sys = (PropertyResourceBundle) ResourceBundle.getBundle("config/para", Locale.US);
 
OK,报错的意思,就是找不到config/para这个ResourceBundle,我开始以为是JNDI一类的,于是去找,找了半天一想 不对啊,这个项目没有哪儿有这类东东啊。网上搜索了半天,发现一个问题,就是别的地方用到ResourceBundle.getBundle()的,没有 一个是像我这样带"/"的。
 
无奈,决定去翻javadoc。
 
jdk doc里面,关于ResourceBundle.getBundle()这个方法的说明足足写了两页,大意是,传进来的参数叫baseName,还有一个 是locale,假如baseName是abc,locale是en_US,那么就应该去找一个叫abc_en_US.properties的文件,当然 如果没有找到,就省略一部分,找abc_en.properties等等,如果还是找不到,就找abc.properties,如果还没有,继续模糊匹 配,实在找不到,就扔出MissingResourceException来了。
 
我总不能建一个文件叫config/para_en_US.properties吧……
 
继续找javadoc,在那整整两页的文档最底下,找到了这么一行:
 
The baseName argument should be a fully qualified class name. However, for compatibility with earlier versions, Sun's Java 2 runtime environments do not verify this, and so it is possible to access PropertyResourceBundles by specifying a path name (using "/") instead of a fully qualified class name (using ".").
 
行,我服你了,去人家项目源代码库里面一找,在classes目录下面果然发现一个目录叫config,下面赫然躺着para.properties这么一个文件。拿下来上传,重启,不报错了,问题搞定。
 
也就是说,这个baseName可以是classpath下面的一个路径,最后一行才是bundle名字。而且这是Sun老大为了兼容早期的版本加上的这么一个功能,而且只能是在PropertyResourceBundle这个子类里面用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值