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

时间:2014-04-25 08:20:33

标签: java resourcebundle properties-file

需要逃避[在值的开头。

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

2 个答案:

答案 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);
        }
    }

}