Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Вы можете найти каталог своего приложения, используя ClassLoader. См.: Java: поиск каталога приложений. Вместо файла .INI используйте файл .properties - вы можете загрузить и сохранить его с помощью класса Properties.

Как отмечали другие, вы не должны писать пользовательские настройки в свой каталог приложений. Что делать, если пользователь не имеет права на запись в каталог приложения? Что делать, если ваше приложение одновременно используется несколькими пользователями в одной и той же системе? Ни одна из этих ситуаций не является необычной, даже в 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 он будет расположен ниже "Мои документы", поэтому пользователи не будут видеть каталог, если они не ищут его.

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

Обычно программисты Java не используют файлы .ini, но файлы .properties(в другом формате). Вы можете использовать класс java.lang.Properties в качестве хорошей программной оболочки, если это так.

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

Вместо этого я напишу файл в каталог System.getProperty( "user.home" ) - домашний каталог пользователей или если он действительно временный, System.getProperty( "java.io.tmpdir" )