Как узнать, существует свойство или нет в файле свойств? - PullRequest
8 голосов
/ 27 мая 2010

Как узнать, существует ли свойство в файле свойств в Java?

Ответы [ 8 ]

11 голосов
/ 27 мая 2010

Согласно http://java.sun.com/javase/6/docs/api/java/util/Properties.html, getProperty() возвращает null, если свойство не было найдено. Вы также можете вызвать propertyNames() или stringPropertyNames() и посмотреть, находится ли интересующее имя свойства в возвращенном наборе.

10 голосов
/ 27 мая 2010

Еще одной альтернативой является использование факта Properties extends Hashtable<Object,Object> и использование containsKey.

4 голосов
/ 27 мая 2010

Просто загрузите файл свойств и попробуйте получить желаемое свойство.

public String getProperty(String key)

Ищет свойство с указанным ключом в этом списке свойств. Если ключ не найден в этом списке свойств, то проверяется список свойств по умолчанию и его значения по умолчанию. Метод возвращает ноль, если свойство не найдено.

3 голосов
/ 09 июня 2017

Вы можете использовать hasProperty

AllValues.hasProperty("childList")
1 голос
/ 07 июля 2015

Ответ от crazyscot теперь устарел. Согласно новому javadoc , свойство просто будет создано, если оно не существует,

«Если текущий набор системных свойств отсутствует, сначала набор системных свойств создается и инициализируется так же, как для метода getProperties».

1 голос
/ 27 июня 2014

Если вы хотите проверить, что в начале программы вы можете сделать следующее:

  1. Создать класс VerifiedProperties, расширяющий Properties
  2. Добавить все свойства в качестве полей этого класса как public final int/String/boolean/etc...
  3. Добавить private final String propertyNotValid="Property not valid" Строка к этому классу
  4. Добавить private final String propertyNotFound="Property not found" Строка к этому классу
  5. Переопределить getProperty() метод из класса Properties.
  6. Вы можете добавить тег @Deprecated, чтобы предложить использование полей. Этот метод невозможно скрыть, потому что он открыт в классе Properties.
  7. Инициализировать все поля в конструкторе, используя метод getProperty() или выделенный для типа (см. Примеры ниже)

Примеры методов, которые заботятся о различных типах свойств:

@Override
@Deprecated
/*
 Deprecated annotation added to suggest usage of the fields.
 */
public final String getProperty(String key)
{
    String propertyValue = super.getProperty(key);
    if (propertyValue != null)
    {
        return propertyValue;
    }
    else
    {
        throw new NoSuchFieldError(this.propertyNotFound + " " + key);
    }
}
private int getIntegerProperty(String key)
{
    String propertyValue = this.getProperty(key);
    try
    {
        int propertyIntValue = Integer.parseInt(propertyValue);
        return propertyIntValue;
    }
    catch (NumberFormatException e)
    {
        throw new NumberFormatException(this.propertyNotValid + " " + key);
    }
}
private boolean getBooleanProperty(String key)
{
    String propertyValue = this.getProperty(key);
    try
    {
        boolean propertyBooleanValue = Boolean.parseBoolean(propertyValue);
        return propertyBooleanValue;
    }
    catch (NumberFormatException e)
    {
        throw new NumberFormatException(this.propertyNotValid + " " + key);
    }
}
private long getLongProperty(String key)
{
    String propertyValue = this.getProperty(key);
    try
    {
        long propertyLongValue = Long.parseLong(propertyValue);
        return propertyLongValue;
    }
    catch (NumberFormatException e)
    {
        throw new NumberFormatException(this.propertyNotValid + " " + key);
    }
}

Тогда вы можете создать где-нибудь:

публичные статические свойства VerifiedProperties;

и используйте нужные свойства как properties.myProperty

Преимущества:

  • у вас есть полный контроль над свойствами, включая обработку исключений и проверку нуля
  • Если свойство не существует или имеет неправильный формат, у вас будет информация при инициализации программы
  • Вам не нужно беспокоиться о синтаксическом анализе свойств для типов, отличных от String в вашем коде.
  • Вы можете добавить валидаторы в свои String свойства
  • Вы можете легко изменить название свойства
  • Если вы используете внешний файл свойств, который может быть изменен пользователем за пределами вашего приложения, если предоставленное изменение неверно или отсутствуют поля, ваша программа не запустится.

Недостатки:

  • Для каждого свойства помимо добавления значения в файл *.properties необходимо создать поле и присвоить значение в конструкторе. Если у вас много свойств, этот файл может выглядеть неприятно.

Советы:

  • легче поддерживать файл, если вы сохраняете то же имя для поля, что и в файле свойств.
  • (Netbeans) вы можете Toggle Rectangular Selection добавить public final String и похоже на множество строк одновременно.
  • (Netbeans), чтобы сохранить файл *.properties в чистоте, вы можете использовать это решение .
1 голос
/ 27 мая 2010

Вы также можете позвонить getProperty(String key, String defaultValue) и проверить значение по умолчанию.

http://java.sun.com/javase/6/docs/api/java/util/Properties.html#getProperty(java.lang.String,java.lang.String)

0 голосов
/ 27 мая 2010

Вот небольшая хитрость, как узнать, существует ли какой-либо файл (не обязательный файл свойств) в пути к классам

public class FileUtil {
    public static boolean isFileExists(String fileName){
         return null != FileUtil.class.getResourceAsStream(fileName);
    }
}

Конечно, это не всегда работает, пока это зависит от аспектов загрузки классов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...