ResourceBundle#GetStringArray를 사용하여 검색 할 수 있도록 속성 파일에 값을 지정하려면 어떻게합니까?
-
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
이를 통해 쉼표로 분리 된 문자열 목록을 검색 할 수 있습니다.
예시:
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"}
};
}