Выдает исключение, когда свойство дублируется в файле свойств.
Как я могу выдать исключение, если файл свойств содержит повторяющееся свойство? Вот пример, демонстрирующий эту ситуацию:
# Properties-file
directory=D:\\media\\D-Downloads\\Errorfile\\TEST_A
directory=D:\\media\\D-Downloads\\Errorfile\\TEST_B
#directory=D:\\media\\D-Downloads\\Errorfile\\TEST_C
3 ответа
Я полагаю, вы читаете файл с чем-то вроде Properties.load()
, Он устанавливает параметр внутренне, используя put(key, value)
, Вы можете переопределить этот метод, чтобы получить желаемое поведение, например, например,
new Properties() {
@Override
public synchronized Object put(Object key, Object value) {
if (get(key) != null) {
throw new IllegalArgumentException(key + " already present.");
}
return super.put(key, value);
}
}.load(...);
РЕДАКТИРОВАТЬ:
Интеграция этого в код ОП:
File propertiesFile = new File("D:/media/myProperties.properties");
Properties properties = new Properties() {
@Override
public synchronized Object put(Object key, Object value) {
if (get(key) != null) {
// or some other RuntimeException you like better...
throw new IllegalArgumentException(key + " already present.");
}
return super.put(key, value);
}
}
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(propertiesFile))) {
properties.load(bis);
} catch (IllegalArgumentException ex) {
//
}
Кстати, почему вы хотите поймать исключение? Я бы не стал продолжать программу, если ее конфигурация повреждена (возможно, перехват на верхнем уровне для регистрации события). Но обработка исключений - это другая тема...
(РЕДАКТИРОВАТЬ: мои исходные коды кода не компилировались, я их исправил)
Как упоминалось здесь, инструмент для поиска повторяющихся ключей и значений в файле свойств
"Есть два хороших инструмента, которые я использую
unival npm package: это инструмент командной строки для обнаружения повторяющихся ключей, значений или строк.
Команда npm для установки пакета: npm i unival
Ссылка: https://www.npmjs.com/package/unival
unival extension: если вы используете vscode, это чрезвычайно полезное расширение для обнаружения дубликатов на лету. "
Лучший способ - запустить тест для запуска unival-команды, это предотвратит попадание повторяющихся значений в файл свойств.
Ответ Ральфа Клеберхофа правильный; однако я бы не стал использовать анонимный класс. Вполне вероятно, что вы хотите использовать эту функцию более одного раза, поэтому я бы создал класс, который расширяет Properties
и переопределить put
как и Ральф
Обратите внимание, что метод put взят из Hashtable
класс который Properties
продолжается.
Вот пример (я не пытался его скомпилировать):
public class UniqueProperties
extends
Properties
{
@Override
public synchronized String put(String key, String value)
{
if (get(key) != null)
{
throw new IllegalArgumentException(key + " already present.");
}
super.put(key, value);
}
}
Вот как я загружаю свойства:
File propertiesFile = new File("D:/media/myProperties.properties");
Properties properties = new Properties();
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(propertiesFile))) {
properties.load(bis);
} catch (Exception ex) {
//
}
@Ralf Как я могу адаптировать ваш код?