需要逃避[在值的开头。
我正在使用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
答案 0 :(得分:1)
java.util.PropertyResourceBundle
基于java.util.Properties
。技术上java.util.Properties
实现Map<Object,Object>
但是当您从文件加载属性时,键和值仅限于String
(检查java.util.Properties.load()
方法的来源)。并且'['字符在属性文件格式中没有特殊含义。
因此,如果您的所有资源包确实都基于属性文件,则由于尝试将ClassCastException
强制转换为String[]
而无法获得String
。
您很可能拥有基于ListResourceBundle
的捆绑包(或ResourceBundle
的自定义子类),其中可以包含任何类型的值,包括数组。
可以将基于属性和基于类的资源包混合使用相同的基本名称,例如,默认资源包可以是属性文件,而特定于语言环境的子包基于ListResourceBundle
。< / p>
答案 1 :(得分:0)
我尝试使用以下程序,我能够从程序中获得输出,没有任何异常
你可以检查一下,让我知道是否还有其他问题
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);
}
}
}