Как создать.INI-файл для хранения некоторых настроек в Java?

Я хочу создать ini-файл для хранения некоторых настроек для моего приложения. Это хорошая идея, чтобы найти где находится файл jar и создать там файл ini? Если да, то как я могу найти местоположение файла jar?

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

редактировать: Я использую mac, и я хочу запустить то же приложение в windows. Я мог бы написать что-нибудь в Система.метод getproperty("пользователя.home"), но я хочу сохранить систему в чистоте, если пользователь решит удалить приложение. Нет лучшего способа сохранить файл настроек, например, в одном каталоге с приложением?

6 ответов


вы можете найти каталог приложений с помощью загрузчика классов. См.: Java: поиск каталога приложений. А не .INI используйте .свойства файл - вы можете загрузить и сохранить это через свойства класса.

Как отмечали другие, вы не должны записывать пользовательские настройки в каталог приложений. Что если у пользователя нет доступа на запись в каталог приложения? Что делать, если ваше приложение используется несколькими пользователями в одной и той же системе одновременно? Ни одна из этих ситуаций не является необычной, даже на Windows.

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

общим соглашением является сохранение настроек пользователя в домашнем каталоге пользователя:

/home/user/.eclipse
C:\Documents and Settings\User\.eclipse

хотя это означает, что вы можете оставить случайные файлы позади, это может быть полезно, если пользователь переустановите приложение. Документируйте такие вещи в README. Вот как создать и получить ссылку на каталог:

public static File getSettingsDirectory() {
    String userHome = System.getProperty("user.home");
    if(userHome == null) {
        throw new IllegalStateException("user.home==null");
    }
    File home = new File(userHome);
    File settingsDirectory = new File(home, ".myappdir");
    if(!settingsDirectory.exists()) {
        if(!settingsDirectory.mkdir()) {
            throw new IllegalStateException(settingsDirectory.toString());
        }
    }
    return settingsDirectory;
}

в unix-подобных операционных системах, начиная имя каталога с точки (".myappdir") сделает каталог скрытым. На Windows, он будет расположен ниже Мои Документы, поэтому пользователи не будут видеть каталог, если они не будут искать его.


Если настройки написаны только вашим приложением (а не редактируются вручную), рассмотрите возможность использования настройки API.


вы не должны хранить временные файлы в каталоге установки приложения. Помните, что пользователь, запускающий приложение может не иметь права на запись в этот каталог. Самое безопасное место для таких вещей-это C:\Documents и настройки\имя пользователя\данные приложения\папка ApplicationName (настройка имени при необходимости).

тем не менее, я бы, вероятно, сохранил этот тип вещей в реестре вместо файла на своем компьютере. (Но, это просто мне.)


обычно Java-программисты не используют .ini-файлы, но .файлы свойств (другой формат). Вы можете использовать Java.ленг.Класс свойств, как хорошая программная оболочка, если вы делаете.

а вы can получите местоположение вашего файла jar, вызвав getProtectionDomain ().getCodeSource ().getLocation () на вашем классе .член класса, я!--3-->не рекомендуем вам сделать это.

вместо этого я бы написал файл в Система.метод getproperty("пользователя.home") directory-домашний каталог пользователя, или, если он действительно временный, системный.getProperty ("java.Ио.tmpdir")


Это зависит от того, должен ли ваш ini быть читаемым/записываемым человеком при нормальных обстоятельствах. Если нет, вы можете использовать файл свойств, а не ini-файл, и сохранить его в папке "пользователь".

Что касается поиска файла jar, вам нужно будет найти загрузчик классов для класса, который, как известно, будет загружен из jar, проверьте, что это соответствующий тип загрузчика классов (т. е. это действительно был загружен из банки), и вы можете извлечь путь из этого. Я могу вероятно, выкопайте код, чтобы сделать это, если это действительно то, что вы хотите. Я бы не советовал.

редактировать пользователь.home property предоставит вам каталог пользователя, который вы можете безопасно использовать.


идея с .файл свойств вместо INI-файла хорош. Кроме того, если вы храните там некоторые конфиденциальные данные, вы можете рассмотреть возможность их шифрования. Проверьте это:

https://www.owasp.org/index.php/How_to_encrypt_a_properties_file

или такой:

шифровать и расшифровывать значение файла свойств в java