ResourceBundle#GetStringArray를 사용하여 검색 할 수 있도록 속성 파일에 값을 지정하려면 어떻게합니까?

StackOverflow https://stackoverflow.com/questions/226050

  •  03-07-2019
  •  | 
  •  

문제

나는 사용하려고합니다 ResourceBundle#getStringArray 검색하려면 a String[] 속성 파일에서. 문서 의이 방법에 대한 설명은 다음과 같습니다.

이 리소스 번들 또는 부모 중 하나에서 주어진 키에 대한 문자열 배열을 가져옵니다.

그러나 속성 파일에 값을 여러 개 개별 키/값 쌍으로 저장하려고 시도했습니다.

key=value1
key=value2
key=value3

그리고 쉼표에 해당하는 목록 :

key=value1,value2,value3

그러나 이것들 중 어느 것도 사용하지 않습니다 ResourceBundle#getStringArray.

속성 파일에서 키/값 쌍 세트를 어떻게 표현 하는가? ResourceBundle#getStringArray?

도움이 되었습니까?

해결책

Properties 객체를 잡을 수 있습니다 Object에스, 뿐만 아니라 String에스. 그것은 압도적으로 .properties 파일을로드하는 데 압도적으로 사용되어 잊혀지는 경향이 있으므로 종종 만 포함합니다. String에스. 문서 전화를 나타냅니다 bundle.getStringArray(key) 전화와 동일합니다 (String[]) bundle.getObject(key). 그게 문제입니다 : 그 가치는 String[], 그것은 a입니다 String.

나는 그것을 쉼표로 매료 된 형식으로 보관하고 호출하는 것이 좋습니다 split() 가치에.

다른 팁

당신이 사용할 수있는 커먼즈 구성, 방법이 있습니다 getList 그리고 getStringArray 이를 통해 쉼표로 분리 된 문자열 목록을 검색 할 수 있습니다.

음, 이것이 스레드에서 일반적인 문제인 것 같습니다. 여기 그리고 여기.

그것은 당신이 메소드를 사용하지 않고 배열 값을 직접 구문 분석하거나 자신의 ResourceBundle 구현을 작성하고 직접 수행하는 것 같습니다. (. 아마도 Apache Commons 프로젝트가있을 것입니다 ...

JDK 소스 코드에서 PropertyResourceBundle이이를 지원하지 않는 것 같습니다.

예시:

mail.ccEmailAddresses=he@anyserver.at, she@anotherserver.at

..

myBundle=PropertyResourceBundle.getBundle("mailTemplates/bundle-name", _locale);

..

public List<String> getCcEmailAddresses() 
{
    List<String> ccEmailAddresses=new ArrayList<String>();
    if(this.myBundle.containsKey("mail.ccEmailAddresses"))
    {
        ccEmailAddresses.addAll(Arrays.asList(this.template.getString("mail.ccEmailAddresses").split("\\s*(,|\\s)\\s*")));// 1)Zero or more whitespaces (\\s*) 2) comma, or whitespace (,|\\s) 3) Zero or more whitespaces (\\s*)
    }       
    return ccEmailAddresses;
}

속성 파일에서로드 된 ResourceBundles에서는 이것이 가능하다고 생각하지 않습니다. PropertyResourceBundle은 속성 클래스를 활용하여 속성 파일을로드합니다. 속성 클래스는 속성 파일을 문자열-> 문자열 맵 항목 세트로로드하고 문자열 [] 값을 꺼내는 것을 지원하지 않습니다.

resourceBundle.getStringArray를 호출하면 ResourceBundle.getObject를 호출하여 결과를 문자열 []로 캐스팅합니다. PropertyResourceBundle 은이 파일에서로드 된 Properties 인스턴스에 이것을 나누기 때문에 현재의 STOCK PropertyResourceBundle과 함께 작동 할 수 없습니다.

스프링 만 사용하십시오 - Spring .Properties 파일 : 배열로 요소를 가져옵니다

관련 코드 :

base.module.elementToSearch=1,2,3,4,5,6

@Value("${base.module.elementToSearch}")
  private String[] elementToSearch;
key=value1;value2;value3

String[] toArray = rs.getString("key").split(";");
public String[] getPropertyStringArray(PropertyResourceBundle bundle, String keyPrefix) {
    String[] result;
    Enumeration<String> keys = bundle.getKeys();
    ArrayList<String> temp = new ArrayList<String>();

    for (Enumeration<String> e = keys; keys.hasMoreElements();) {
        String key = e.nextElement();
        if (key.startsWith(keyPrefix)) {
            temp.add(key);
        }
    }
    result = new String[temp.size()];

    for (int i = 0; i < temp.size(); i++) {
        result[i] = bundle.getString(temp.get(i));
    }

    return result;
}

나는 이것을 시도하고 방법을 찾을 수있었습니다. 한 가지 방법은 ListresourceBundle의 서브 클래스를 정의한 다음 String []의 인스턴스 변수를 정의하고 키에 값을 할당하는 것입니다. 여기에 코드가 있습니다.

@Override
protected Object[][] getContents() {
    // TODO Auto-generated method stub

    String[] str1 = {"L1","L2"};

    return new Object[][]{

            {"name",str1},
            {"country","UK"}                
    };
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top