Подтвердить что ты не робот

Как указать значения в файле свойств, чтобы их можно было получить с помощью ResourceBundle # getStringArray?

Я пытаюсь использовать ResourceBundle#getStringArray для извлечения String[] из файла свойств. Описание этого метода в документации гласит:

Получает строковый массив для данного ключа из этого ресурсного пакета или одного из его родителей.

Однако я попытался сохранить значения в файле свойств как несколько отдельных пар ключ/значение:

key=value1
key=value2
key=value3

и как список с разделителями-запятыми:

key=value1,value2,value3

но ни один из них не может быть восстановлен с помощью ResourceBundle#getStringArray.

Как вы представляете набор пар ключ/значение в файле свойств, чтобы их можно было найти с помощью ResourceBundle#getStringArray?

4b9b3361

Ответ 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.

Ответ 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"}                
    };
}