java:方括号的属性文件转义序列



需要在值的开头转义[。

我正在使用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);
        }
    }
}

最新更新