Проверка файла свойств 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); } } } }