2014-04-25 2 views
1

값 시작시 [이스케이프해야합니다. 내가 속성을 읽을 수 PropertyResourceBundle가 사용하고java : 속성 파일 대괄호에 대한 이스케이프 시퀀스

는 파일과 내가 값이

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.PropertyResourceBundlejava.util.Properties를 기반으로하는 경우 알려 주시기 바랍니다 수 있습니다. 기술적으로 java.util.PropertiesMap<Object,Object>을 구현하지만 파일에서 속성을로드 할 때 키와 값은 String으로 제한됩니다 (java.util.Properties.load() 메서드의 소스를 확인하십시오). 그리고 '['문자는 특성 파일 형식에서 특별한 의미가 없습니다.

은 따라서 모든 리소스 번들이 참으로 속성 파일을 기반으로하는 경우 String로 인해 String[]의 시도 캐스트에 ClassCastException를 얻을 수 없다. 대부분의 경우

당신이 어떤 유형의 값을 포함 할 수있는 ListResourceBundle 기반 번들 (또는 ResourceBundle의 사용자 지정 하위 클래스)가, 배열이 포함되어 있습니다.

그리고 같은 기본 이름으로 속성 기반 및 클래스 기반 리소스 번들을 혼합 할 수 있습니다. 예를 들어 기본 리소스 번들은 속성 파일이 될 수 있고 로캘 별 하위 번들은 ListResourceBundle 기반입니다.

+0

예'ListResourceBundle'이 작동했습니다; 하지만 지금은 'PropertyResourceBundle'을 확장하여 제 경우를 처리했습니다. –

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

} 
+0

"문자열 값 = rb.getString (키);"여전히 동일한 예외가 발생합니다 –

+0

출력이 myapp.add.user.email.selfRegistration.subject로 표시됩니다 : [MYAPP] MYAPP에 오신 것을 환영합니다. 위의 프로그램 ... jdk 버전 ru 사용? –

+0

자바 버전 7을 사용하고 있습니다. –

관련 문제