Проверка файла свойств Java
Мое приложение Java загружает файл свойств при запуске, который содержит пары ключ-значение. Я могу установить и получить ожидаемые свойства успешно.
Однако в таком виде файл свойств может содержать любое имя свойства, которое я хочу туда поместить. Я хотел бы иметь возможность ограничить свойства определенным набором, некоторые из которых являются обязательными, а другие необязательными.
Я могу вручную проверить каждое загруженное свойство против допустимого набора, но мне было интересно, есть ли еще элегантный способ сделать это. Например, возможно, каким-то образом объявить ожидаемые обязательные/необязательные свойства, чтобы при загрузке файла свойств возникло исключение, если обнаружено недопустимое или отсутствующее свойство. Похоже на то, что предлагает boost::program_options в C++.
2 ответа:
Я могу вручную проверить каждое загруженное свойство на соответствие допустимому набору, но я интересно, есть ли более элегантный способ сделать это. Например, возможно некоторый способ объявить ожидаемые обязательные / необязательные свойства, так что что при загрузке файла свойств возникает исключение, если обнаружено недопустимое или отсутствующее свойство.
Встроенный API JDK (java.утиль.Свойства ) не предлагают такого рода проверки.
Однако этого не должно быть трудно имплицировать свой собственный класс
ConfigLoader, который делает это. Ваш класс может обернутьjava.util.Propertiesи проверить данные после загрузки. Например, можно вести список обязательных и необязательных ключей (жестко закодированных или загруженных извне), а затем сверять список загруженных Ключей с этими списками.Возможно, вы могли бы найти какую-то реализацию, которая делает это, но поскольку сама проверка будет специфичной для ваших потребностей в любом случае, а остальное довольно просто, я не думаю, что стоит охотиться для существующего решения.
Поскольку
Propertiesуже является простой итерационной структурой, я бы просто выполнил вашу проверку против этого объекта. Ниже приведена простая проверка требуемых и необязательных параметров.public static void testProps(Properties props, Set<String> required, Set<String> optional) { int requiredCount=0; Enumeration keys = props.keys(); while (keys.hasMoreElements()) { String key=(String) keys.nextElement(); if (required.contains(key)) { requiredCount++; } else if (!optional.contains(key)) { throw new IllegalStateException("Unauthorized key : " + key); } } if (requiredCount<required.size()) { for (String requiredKey : required) { if (!props.containsKey(requiredKey)) { throw new IllegalStateException("Missing required key : " + requiredKey); } } } }