Каков правильный способ хранения данных app conf на Java?

где вы сохраняете данные конфигурации для пользователя для приложения J2SE?

(Например, C:\Users\USERNAME\AppData\Roaming\в Windows и /home/username в Unix)

Как вы можете получить эти места в файловой системе независимо от платформы?

Спасибо за ваш совет!

Ответы

Ответ 1

Это зависит от вашего вида приложения J2SE:

  • J2SE исполняемый JAR файл (очень простой): используйте свойство user.home System, чтобы найти home-dir. Затем создайте субдир (например, PGP, SVN,... do)
  • Java Web Start предоставляет очень хорошие включенные методы для безопасных свойств. Всегда пользовательский
  • Наконец, Eclipse RCP: у вас есть представление о рабочей области (также полученной из user.home) для пользователей и конфигурации (не совсем уверен, как получить доступ к этой сложной в Vista) для широкого использования компьютера.

Все эти подходы при использовании с осторожностью - используйте правильную separatorChar - нейтральную ОС.

Ответ 2

Сначала в формате:

  • Java файлы свойств хороши для пар ключ/значение (также автоматически обрабатывают символы новой строки). Степень структуры возможна с помощью "точечной нотации". Недостатком является то, что структура не позволяет вам легко перечислить объекты конфигурации верхнего уровня и работать поэтапно. Лучше всего использовать небольшой набор часто настраиваемых настроек для среды
  • Файлы XML - довольно часто используются для более сложной конфигурации различных фреймворков Java (особенно J2EE и Spring). Я бы посоветовал вам хотя бы узнать о Spring - он содержит много идей, которые стоит знать, даже если вы решите не использовать его. Если вы решите перевернуть свою собственную XML-конфигурацию, я бы рекомендовал использовать XStream с помощью настраиваемых параметров сериализации или просто нужно проанализировать некоторые XML файлы, посмотрите XOM. BTW Spring также позволяет подключать собственный язык настройки XML, но это относительно сложная задача. Конфигурация XML лучше всего использовать для более сложной "внутренней" конфигурации, которую конечный пользователь не видит или не настраивает.
  • Сериализованные объекты Java - быстрый и простой способ сохранить состояние объекта и восстановить его позже. Полезно, если вы пишете графический интерфейс конфигурации, и вам все равно, является ли конфигурация доступной для человека. Остерегайтесь проблем с совместимостью при разработке классов.
  • Предпочтения - введены в Java 1.4, позволяют хранить типизированные тексты, числа, байтовые массивы и другие примитивы в платформенном хранилище. В Windows это реестр (вы можете выбирать между /Software/JavaSoft/Prefs под HKLM или HKCU). В Unix тот же API создает файлы под домашним домом или /etc. Каждый куст prefs можно экспортировать и импортировать в виде файла XML. Вы можете указать пользовательскую реализацию интерфейса PreferencesFactory, установив для JVM-свойства java.util.prefs.PreferencesFactory значение вашего имени класса реализации.

В целом использование API prefs может быть хорошим или плохим, основанным на вашем сценарии приложений.

  • Если вы планируете иметь несколько версий одного и того же кода, работающих на одном компьютере с другой конфигурацией, то использование API настроек - это плохая идея.
  • Если вы планируете использовать приложение в ограниченной среде (домен Windows или жестко управляемый блок Unix), вам необходимо убедиться, что у вас есть правильный доступ к необходимым разделам/каталогам. Это застало меня врасплох не раз.
  • Остерегайтесь перемещаемых профилей (реплицированных домашних компьютеров), они составляют некоторые забавные сценарии, когда задействовано более чем одна активная машина.
  • Предпочтения не так очевидны, как файл конфигурации в каталоге приложения. большинство штатных сотрудников службы поддержки не ожидают и не любят их.

Что касается макета файла префов, он снова зависит от вашего приложения. Общее предложение:

  • Пакет большинства ваших XML файлов внутри JAR приложения помещается в каталог root или under/META-INF. Эти файлы будут доступны только для чтения и считаются приватными для приложения.
  • Поместите пользовательскую конфигурацию под $APP_HOME/conf. Он должен состоять в основном из файлов свойств и иногда простого XML файла (сериализация XStream). Эти файлы настраиваются как часть процесса установки и обычно не обслуживаются пользователем.
  • В пользовательском доме в dot-каталоге (т.е. '~/.myapplication) хранится любая пользовательская конфигурация. Конфигурация пользователя может переопределять конфигурацию пользователя в каталоге conf. Любые изменения, внесенные в приложение, можно найти здесь (см. Также следующий пункт).
  • Вы также можете использовать каталог $APP_HOME/var для хранения любых других изменяемых данных, специфичных для этого экземпляра приложения (в отличие от пользователя). Другим преимуществом этого подхода является то, что вы можете перемещать и копировать все приложение и его конфигурацию с помощью простой копии одного каталога.

Это иллюстрирует некоторые стандартные методы управления конфигурацией. Вы можете реализовать их с использованием разных библиотек и инструментов, начиная с raw JRE, добавив Spring/Guice или перейдя на полный контейнер J2EE (возможно, со встроенным Spring)

Другими подходами для управления конфигурацией являются:

  • Используя несколько базовых каталогов для запуска нескольких экземпляров приложения с использованием разных конфигураций.
  • Использование легкий реестры для централизованного управления конфигурацией
  • Центрально управляемый файл базы данных управления конфигурацией (CMDB), содержащий значения для каждого компьютера для каждой машины, каждую ночь передается всем рабочим хостам. Приложение использует шаблонную конфигурацию и выбирает из CMDB во время выполнения на основе текущего имени хоста.

Ответ 3

Java имеет библиотеку специально для этого в java.util.prefs.Preferences.

Preferences userPrefs = Preferences.getUserNodeForPackage(MyClass.class); // Gets user preferences node for MyClass
Preferences systemPrefs = Preferences.getSysteNodeForPackage(MyClass.class); // Gets system preferences node for MyClass
Preferences userPrefsRoot = Preferences.getUserRoot(); // Gets user preferences root node
Preferences systemPrefsRoot = Preferences.getSystemRoot(); // Gets system preferences root node

Ответ 5

Для пользовательской конфигурации вы можете написать файл конфигурации в папку, на которую указывает системное свойство "user.home". Конечно, будет работать только на этой машине.

Ответ 6

Я использую этот

    String pathFile = null;
    if(OS.contains("win")){
        pathFile = System.getenv("AppData");
    }else{
        pathFile = System.getProperty("user.home");
    }

Я сохраняю настройки своего приложения здесь C:\Users\USERNAME\AppData\на окнах user.home(/home/USERNAME) на других платах