Как получить свойства без разграничения?
Я использую 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