Как получить свойства без разграничения?

Я использую commons-configuration v1.10 и использую класс PropertiesConfiguration читать в моих приложениях свойства. У меня есть свойство с запятыми, но когда я его читаю, оно разделяется, и я не могу понять, как этого не делать.

Оно выводит свойство обратно по порядку и включает запятые, но причина, по которой это проблема, заключается в том, что я окружаю ее '[' и ']'.

AbstractConfiguration имеет функцию, setDelimiterParsingDisabled(), это отключает разделение, но я не смог найти класс, который реализовал его для чтения файлов свойств.

private static String readProperty(String property) {
    try {
        Configuration configuration = new PropertiesConfiguration(propertiesFile);
        return configuration.getProperty(property).toString();
    }
    catch(ConfigurationException e) {
        System.out.println("Issue reading " + property + " property");
        e.printStackTrace();
        System.exit(1);
        return "";
    }
}

3 ответа

Решение

Не похоже, что я могу использовать Apache Commons или PropertiesConfiguration чтобы получить свойства без разграничения. Тем не мение, java.util.Properties не имеет этой проблемы, так что использовал вместо PropertiesConfiguration,

MKYong имеет хороший пример того, как его настроить, http://www.mkyong.com/java/java-properties-file-examples/

Это работает, но вы должны отключить его или установить перед загрузкой конфигурации.

PropertiesConfiguration config = new PropertiesConfiguration();
config.setDelimiterParsingDisabled(true)
config.setListDelimiter(';');
config.setFile(new File("application.properties"));
config.load();

Размещение вашего кода поможет.

Согласно официальным документам, которые вы хотите AbstractConfiguration.setListDelimiter(null);

Вы также можете использовать String методы поиска и удаления окружающих []. Предполагая, что свойство находится в строке с именем prop:

int start = prop.indexOf('[') + 1;
int end = prop.lastIndexOf(']');
String val = prop.substring(start,
    end > 0 ? end : prop.length());

indexOf Возвращает -1, если символ не найден, поэтому добавление 1 для начала реального значения свойства всегда работает, даже если разделитель отсутствует.

PropertiesConfiguration properties = new PropertiesConfiguration();
properties.setDelimiterParsingDisabled(true);

Приведенный выше код решает проблему, нет необходимости переключаться на java.util.Properties. Иерархия выглядит следующим образом:

    PropertiesConfiguration
              |
              |(extends)
              |
    AbstractFileConfiguration
              |
              |(extends)
              |
    BaseConfiguration
              |
              |(extends)
              |
    AbstractConfiguration

В моем случае я использовал Конфигурацию свойств Apache специально, поскольку она поддерживает подстановку переменных, которая не поддерживается в java.util.Properties

Другие вопросы по тегам