2011-01-12 3 views
11

Java tutorial об использовании свойств говорит о том, как использовать класс Properties. В учебнике показано, что свойства записываются в файл с именем defaultProperties. Итак, что такое хорошее имя и местоположение для файла свойств?Где хранить файлы .properties для Java?

Обычно я пишу одно из двух приложений Java: системную утилиту или программу пользователя. Я думаю, что большинство системных утилит будет иметь файл в /etc/myfile.properties, и большинство пользовательских программ создадут ~/.myfile.properties. Однако эти пути не будут работать в Windows. Существует ли более общий способ определения этих деталей, чтобы сделать платформу кода независимой?

+0

Взгляните на это решение: http://stackoverflow.com/questions/966029 – Hiro2k

+0

Короткий ответ на ваш последний вопрос - «нет». Windows действительно не имеет хороших мест для хранения конфигурационных файлов совершенно так же, как это делает UNIX, поскольку она меньше ориентирована на файлы. Именно поэтому был изобретен API-интерфейс предпочтений. Какой я позор, но ты здесь. –

ответ

0

Вот несколько альтернативных решений:

  • Прочитайте файл свойств из классов
  • Пройди пути к файлу свойств в качестве аргумента запуска к применению

Чтения его из класса path дает вам гибкость, так как вы можете включить его в банку или указать ее при запуске приложения.

6

Если говорить о сохранении внешнего файла свойств для настройки приложения, то я хотел бы предложить

System.getProperty("user.home")+File.separator+ "yourappname"+File.separator+"name.properties" 

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

ИЛИ

других вариантов с использованием XML-файл, или Preference

+0

Это кажется выполнимым. Существует ли независимый от платформы эквивалент '/ etc'? Я даже не уверен, что это будет отображаться в Windows, поскольку реестр обычно используется для этой информации. – User1

+0

'System.getProperty (« пользователь.home ")' является независимой от платформы, для Linux это будет/home/userName /, для окон это будет 'c: \\ Documents and Settings \\ userName \\' –

+0

life.java: неожиданно, в Windows это не C: \ Documents and Settings \ userName, это что-то вроде C: \ WINNT \ Profiles \ userName. См. Http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4162112 и друзей. Однако для целей User1, это, вероятно, лучше. –

0

Если ваши группируют реквизит файл как часть приложения и только для чтения, то поместите его в банке файл. Если вам нужно также обновить его, сделайте его доступным через файл: /// url и передайте путь к файлу как аргумент JVM (-DfileUrl = ...).

Посмотрите на этот пост о том, как читать реквизита файл из JAR в пути к классам: Reading properties file from JAR directory

7

В этом случае я хотел бы использовать Preferences API вместо Properties.

Preferences позволяет сохранять/извлекать пользовательские и системные настройки и автоматически обрабатывать сохранение для вас. Настойчивость является специфичной для платформы; для Windows он использует реестр, а для Unix он использует скрытые файлы.

+1

Мне нравится эта идея, и я думаю, что она будет работать для большинства проектов. Я хочу, чтобы файл конфигурации обнаружил, что пользователь может настраивать внешнюю часть приложения. Есть ли способ заставить API 'Preferences' работать таким образом? – User1

+0

Если вы хотите настроить файл конфигурации, который пользователь может настроить, используйте« Свойства ». – Qwerky

0

Использование jndi - хорошее решение. Конфигурация времени выполнения через консоль администратора веб-сервера. Webapp изменит настройки, как только вы получите свойство, вам не нужно перезапускать приложение.

Смежные вопросы