Имитировать app.config для Java? - PullRequest
0 голосов
/ 09 апреля 2009

Я знаю, что вы можете использовать java.util.Properties для чтения файлов свойств Java.

См .: Java эквивалентен app.config?

Есть ли стандартное место для размещения этого файла? В .NET мы помещаем application.exe.config в тот же каталог, что и application.exe. Приложение ищет его здесь по умолчанию.

Java можно настроить для поиска файла свойств в пути к классам, но я пытаюсь понять, какую структуру имени файла / пути использовать и как использовать стандартный формат .properties или файл формата XML.

При условии, что у меня есть API, упакованный в org_example_api.jar (корневой пакет - org.example.api). Я не хочу помещать файл свойств в банку, так как он должен редактироваться пользователем. Я хочу, чтобы пользователь мог поместить необходимые свойства конфигурации в файл .properties или .xml где-нибудь относительно пути к классам, чтобы я мог найти его, не зная ничего о структуре файловой системы ir.

Будет ли это работать на всех системах:

/classpath/org_example_api.jar
/classpath/org/example/api/config.properties OR
/classpath/org/example/api/config.xml

Код:

java.util.Properties = ? //NEED SOME HELP HERE

Ответы [ 3 ]

2 голосов
/ 09 апреля 2009

Это зависит только от типа приложения, которое вы разрабатываете.

1) Если это веб-приложение, лучшее место - в папке WEB-INF / classes /.

2) Если вы разрабатываете отдельное приложение, существует множество подходов. Из вашего примера я думаю, что следующая структура будет работать.

/<dist>/org_example_api.jar
/<dist>/config.xml
/<dist>/run.sh

В run.sh вы можете запустить приложение java, предоставляя текущий каталог также в classpath. Как то так.

java -cp.: Org_example_api.jar ClassToExecute

3) Если это дистрибутив API, то это зависит от конечного пользователя. Вы можете сказать пользователю, что он может предоставить config.xml в classpath, который должен следовать некоторой предопределенной структуре. Вы можете посмотреть на Log4J в качестве примера в этом случае.

1 голос
/ 09 апреля 2009

Вы можете поместить файл свойств в каталог или JAR в CLASSPATH, а затем использовать

InputStream is = getClass().getResourceAsStream("/path/goes/here");
Properties props = new Properties();
props.load(is);

(я заметил, что вы упомянули об этом в своем OP, но другие могут найти код полезным.)

1 голос
/ 09 апреля 2009

Мир широко открыт для вас здесь. Единственная лучшая практика - это то, что лучше всего подходит для вас:

  1. Какой бы программе ни выполнялся пользователь, в качестве аргумента может потребоваться путь к файлу свойств
  2. Ваше приложение может быть настроено на поиск в текущем каталоге config.properties.
  3. Если файл не может быть найден, вы можете обратиться к каталогу user.home или вернуться туда, где установлено ваше приложение.

Лично у меня обычно мои приложения пытаются прочитать файлы свойств из пути к классам - но я не в мире, где у меня есть конечные пользователи, чтобы обновить / изменить файл.

Какой бы вариант вы ни выбрали, просто убедитесь, что вы четко документировали его для своих пользователей, чтобы они знали, какой файл редактировать и где он должен быть!

...