Проблема загрузки свойств Java - PullRequest
1 голос
/ 23 апреля 2010

Я пытаюсь загрузить свойства из файла (test.properties)

Код, который я использую, выглядит следующим образом:

URL url = getClass().getResource("../resources/test.properties");
properties.load(url.openStream());

Но при выполнении второй строки я получаю NPE. (исключение нулевого указателя)

Я не уверен, что здесь не так ... Я проверил, существует ли файл в том месте, где URL указывает на ...

Любая помощь приветствуется ....

Ответы [ 6 ]

3 голосов
/ 23 апреля 2010

Javadoc для Class.getResource(String) говорит:

Возвращает: объект URL или ноль , если не найден ресурс с этим именем

Скорее всего, проблема в том, что getResource не находит ресурс, который ищет.Я очень подозрительно отношусь к использованию ".." в названии ресурса.Javadoc не говорит, что getResource рассматривает "." или ".." компоненты пути как имеющие особое значение.

Также возможно, что properties является нулевым ...

2 голосов
/ 23 апреля 2010

Я могу ошибаться, но я не верю , что вы можете использовать "..", например, при вызове getResource(). Я предлагаю вам попробовать "абсолютный" ресурс:

URL url = getClass().getResource("/path/to/resources/test.properties");
1 голос
/ 23 апреля 2010

Ответ на вопрос, найдет ли ваш файл getResource, зависит от вашего системного загрузчика классов.Загрузчик классов вызывается, но перед вызовом загрузчика классов в передаваемой строке выполняется следующее преобразование.

Из класса javadoc:

  • Если имяначинается с '/' ('\ u002f'), затем абсолютное имя ресурса является частью имени, следующей за '/'.
  • В противном случае абсолютное имя имеет следующий видФорма:

    имя_пакета_измененного_пакета / имя

    Где имя_пакета_пакета_представления - это имя пакета этого объекта с заменой '/' на '.'('\ u002e').

Итак, возникает вопрос: сможет ли используемый вами загрузчик классов разрешить modified_package_name/../resources/test.properties?

1 голос
/ 23 апреля 2010

Возможно, это properties объект, null?

0 голосов
/ 09 января 2014

Вы также можете использовать Apache PropertiesConfiguration

0 голосов
/ 23 апреля 2010

getClass().getResource() разрешает ресурс относительно данного класса.Попробуйте getClass().getClassLoader().getResource().

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