需要在值的开头转义[。
我正在使用PropertyResourceBundle读取属性文件,并且我有一个属性的值以方括号开头,如
myapp.add.user.email.selfRegistration.subject=[MYAPP] Welcome to MYAPP
当我试图读取这个文件时,我得到了以下异常
java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to
java.lang.String at
java.util.ResourceBundle.getString(ResourceBundle.java:355)
我正在使用jdk7
java.util.PropertyResourceBundle
基于java.util.Properties
。从技术上讲,java.util.Properties
实现Map<Object,Object>
,但从文件加载属性时,键和值仅限于String
(请检查java.util.Properties.load()
方法的来源)。"["字符在属性文件格式中没有特殊含义。
因此,如果您的所有资源捆绑包都确实基于属性文件,则由于尝试将String[]
强制转换为String
,因此不可能获得ClassCastException
。
很可能您有一个基于ListResourceBundle
的bundle(或ResourceBundle
的自定义子类),可以包含任何类型的值,包括数组。
可以将基于属性和基于类的资源捆绑包混合使用相同的基本名称,例如,默认资源捆绑包可以是属性文件,而特定于区域设置的子捆绑包是基于ListResourceBundle
的。
我对下面的程序进行了同样的尝试,我能够从我的程序中获得输出,没有任何异常
你能检查一下吗?如果有其他问题,请告诉我
package com.kb;
import java.util.Enumeration;
import java.util.ResourceBundle;
public class ResourceBundleTest {
public static void main(String[] args) {
ResourceBundle rb = ResourceBundle.getBundle("mybundle");
Enumeration <String> keys = rb.getKeys();
while (keys.hasMoreElements()) {
String key = keys.nextElement();
String value = rb.getString(key);
System.out.println(key + ": " + value);
}
}
}