Как Java ResourceBundle.getBundle загружает файл свойств? - PullRequest
0 голосов
/ 13 мая 2019

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

Расположение файла свойств: /sandbox/resources/properties/MessageBundle_en_US.properties

Расположение приложения: / sandbox / src / main / java / com / app /sandbox / app.java

enter image description here

Не уверен, что происходит.Я пробовал несколько комбинаций, но это не может пройти мимо исключения.Я даже попробовал весь путь к папке.Может кто-нибудь сказать мне, как метод ResourceBundle.getBundle () ищет файлы свойств?

ОБНОВЛЕНИЕ 1: Это решение перестало работать несколько минут спустя:

ResourceBundle mybundle = ResourceBundle.getBundle("MessageBundle");

ОБНОВЛЕНИЕ 2: Приведенное выше решение больше не работало во время моего последнего запуска.Поэтому я изменил его на:

ResourceBundle mybundle = ResourceBundle.getBundle("properties/MessageBundle");

И это сработало.Кажется, может быть проблема с кэшированием того, как ResourceBundle ищет файл свойств.

Я до сих пор не уверен, как класс ResourceBundle выглядит для файла свойств.В нем говорится передать параметр "baseName":

baseName - the base name of the resource bundle, a fully qualified class name

https://docs.oracle.com/javase/7/docs/api/java/util/ResourceBundle.html#getBundle(java.lang.String)

Но не ясно, как он начинает искать файлы.Начинает ли он искать из корня каталога проекта?Если кто-то может ответить на это, было бы хорошо.Что это означает под полностью определенным именем класса .Я не думаю, что «properties.MessageBundle» полностью квалифицирован.

Ответы [ 2 ]

2 голосов
/ 13 мая 2019

Попробуйте использовать, как показано ниже;

ResourceBundle bundle = ResourceBundle.getBundle("properties/MessageBundle");
0 голосов
/ 13 мая 2019

Да, это должно быть так:

R`esourceBundle mybundle = ResourceBundle.getBundle("MessageBundle");`

Причина, по которой он может найти его в пакете свойств без указания всего пути, заключается в том, что Java знает, что пакеты по умолчанию должны быть в этомпакет, и он не нуждается в других частях.Итак, если вы используете весь путь, например: "/sandbox/resources/properties/MessageBundle", Java будет интерпретировать его следующим образом:

"/sandbox/resources/properties/MessageBundle/sandbox/resources/properties/MessageBundle"

Что явно не правильно.Поэтому, если вам нужно создать больше пакетов внутри пакета свойств, просто перейдите оттуда, а не из корня вашего проекта.

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