java:方括号的属性文件转义序列
Posted
技术标签:
【中文标题】java:方括号的属性文件转义序列【英文标题】:java : properties file escape sequence for square bracket 【发布时间】:2014-06-10 20:32:21 【问题描述】:需要在值的开头转义 [。
我正在使用 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
【问题讨论】:
【参考方案1】:java.util.PropertyResourceBundle
基于java.util.Properties
。从技术上讲,java.util.Properties
实现了Map<Object,Object>
,但是当您从文件加载属性时,键和值仅限于String
(检查java.util.Properties.load()
方法的来源)。并且'['字符在属性文件格式中没有特殊含义。
因此,如果您的所有资源包确实基于属性文件,则由于尝试将String[]
转换为String
,因此不可能获得ClassCastException
。
您很可能有一个基于ListResourceBundle
的包(或ResourceBundle
的自定义子类),它可以包含任何类型的值,包括数组。
并且可以混合使用具有相同基本名称的基于属性和基于类的资源包,例如,默认资源包可以是属性文件,而特定于语言环境的子包是基于ListResourceBundle
。
【讨论】:
是的ListResourceBundle
工作;但现在我扩展了PropertyResourceBundle
来处理我的情况。【参考方案2】:
我对下面的程序进行了同样的尝试,我可以毫无例外地从我的程序中获取输出
你能检查一下,如果有任何其他问题,请告诉我
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);
【讨论】:
"String value = rb.getString(key);"
仍然抛出相同的异常
我使用的是 java 版本 7
我刚才在Java 7中运行了上面的代码......它工作得很好......请检查你的代码是否正在读取任何asString数组并放入String,因为这种异常只发生在String[] 赋值给 String。否则发布您的整个代码将对其进行查看..以上是关于java:方括号的属性文件转义序列的主要内容,如果未能解决你的问题,请参考以下文章