Как указать значения в файле свойств, чтобы их можно было получить с помощью ResourceBundle # getStringArray?
Я пытаюсь использовать ResourceBundle#getStringArray
для извлечения String[]
из файла свойств. Описание этого метода в документации гласит:
Получает строковый массив для данного ключа из этого ресурсного пакета или одного из его родителей.
Однако я попытался сохранить значения в файле свойств как несколько отдельных пар ключ/значение:
key=value1
key=value2
key=value3
и как список с разделителями-запятыми:
key=value1,value2,value3
но ни один из них не может быть восстановлен с помощью ResourceBundle#getStringArray
.
Как вы представляете набор пар ключ/значение в файле свойств, чтобы их можно было найти с помощью ResourceBundle#getStringArray
?
Ответы
Ответ 1
Объект A Properties
может содержать Object
s, а не только String
s. Это, как правило, забыто, потому что они в подавляющем большинстве используются для загрузки файлов .properties и поэтому часто содержат только String
s. В документации указано, что вызов bundle.getStringArray(key)
эквивалентен вызову (String[]) bundle.getObject(key)
. Что проблема: значение не является String[]
, это a String
.
Я бы предложил сохранить его в формате с разделителями-запятыми и вызвать split()
для значения.
Ответ 2
Вы можете использовать Commons Configuration, которая имеет методы getList
и getStringArray
, которые позволяют вам получить список разделенных запятыми строк.
Ответ 3
Умм, похоже, что это обычная проблема, из потоков здесь и .
Кажется, вы либо не используете метод, либо сами разбираете значение для массива, либо пишете свою собственную реализацию ResourceBundle и делаете это сами:( Возможно, для этого существует проект apache commons...
Из исходного кода JDK кажется, что PropertyResourceBundle не поддерживает его.
Ответ 4
Пример:
[email protected], [email protected]
..
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;
}
Ответ 5
Я не считаю, что это возможно с ResourceBundles, загруженным из файла свойств. Свойство PropertyResourceBundle использует класс Properties для загрузки файла свойств. Класс Properties загружает файл свойств в виде набора записей String- > String и не поддерживает вытягивание значений String [].
Вызов ResourceBundle.getStringArray просто вызывает ResourceBundle.getObject, отбрасывая результат на String []. Поскольку PropertyResourceBundle просто передает это значение в экземпляр свойств, который он загрузил из файла, вы никогда не сможете заставить его работать с текущим ресурсом PropertyResourceBundle.
Ответ 6
просто используйте spring - Spring.properties файл: получите элемент как массив
соответствующий код:
base.module.elementToSearch=1,2,3,4,5,6
@Value("${base.module.elementToSearch}")
private String[] elementToSearch;
Ответ 7
key=value1;value2;value3
String[] toArray = rs.getString("key").split(";");
Ответ 8
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;
}
Ответ 9
Я пробовал это и мог найти способ.
Один из способов - определить подкласс ListresourceBundle, затем определить переменную экземпляра типа String []
и присвойте значение ключу.. вот код
@Override
protected Object[][] getContents() {
// TODO Auto-generated method stub
String[] str1 = {"L1","L2"};
return new Object[][]{
{"name",str1},
{"country","UK"}
};
}