Сохранение пользовательских настроек / базы данных / кэша ... на Java (на каждой ОС) - PullRequest
7 голосов
/ 02 декабря 2008

Мое Java-приложение сохраняет данные в 'user.home', но в Windows это не правильный путь для сохранения информации о приложении (как сказал мне друг). Другим вариантом является использование параметров API, но невозможно установить местоположение hsqldb с помощью параметров API. Кроме того, я хочу, чтобы все файлы были доступны в одной папке (локальная база данных, конфиг, кеш, ...).

Я ищу пример кода или фреймворк, который заботится о специфических для ОС вещах.

Ответы [ 5 ]

3 голосов
/ 02 декабря 2008

В моей системе WinXP Pro SP3 user.home указывает на C:\Documents and settings\<username> Многие приложения просто хранят свои данные там (вместо этого пути + данные приложений, но некоторые другие переходят туда), создавая каталог в стиле Unix, т.е. точка + имя приложения (примеры: .antexplorer, .sqlworkbench, .squirrel-sql, .SunDownloadManager, .p4qt, .gimp-2.4 и т. д.).

Похоже на приличную, обычную практику ...

1 голос
/ 26 октября 2010

динамически считывает (из вашего кода) значение переменной среды APPDATA и сохраняет ваши файлы конфигурации в %APPDATA%\\.myapp\config

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

1 голос
/ 02 декабря 2008

Для приложения "foo" я бы создал каталог с именем ".foo" внутри user.home. Для Windows это будет выглядеть немного странно, но почти никто никогда не заглядывает в этот каталог (и он в любом случае заполнен непонятными каталогами), а в Linux / Solaris / ... это приведет к скрытому каталогу, который не загромождает домашний каталог пользователей. визуально.

1 голос
/ 02 декабря 2008

Для оконного приложения необычно сохранять данные в user.home, но не «неправильно». Приложения Windows любят распространять свои данные повсюду (немного в реестре, немного в каталоге установки приложения, немного в каталоге Windows, немного в System32, немного здесь и немного там). В конце концов, это делает невозможным чистое резервное копирование или удаление чего-либо, что приводит к известной «гнили Windows» (т.е. вам приходится переустанавливать каждые несколько месяцев).

В любом случае. Если вы действительно не хотите использовать user.home (и я не вижу причин для этого), используйте код вроде this из Apache commons-lang , чтобы выяснить, работаете ли вы в Windows. Если это дает true, всплывающее диалоговое окно выбора каталога, где пользователь может указать, где они хотят сохранить свои данные.

Сохраните эту информацию в настройках и используйте этот путь при следующем запуске приложения. Таким образом, пользователи могут указать, где они хотят, чтобы их данные, и вам нужно только оставить один бит информации в настройках.

0 голосов
/ 02 декабря 2008

Проблема не в Windows, а в стандартной настройке Java.

долгое обсуждение http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4787931>Here

Я бы посоветовал выбрать это свойство '-D MYLOC =% USERPROFILE%' в командной строке.

Обратите внимание, что вы получите «USERPROFILE» только в том случае, если пользователь выполнил вход в систему с рабочего стола, но он не будет установлен, если пользователь вошел в систему удаленно с помощью Citrix или аналогичной системы или через ssh, а также рабочие столы coprporate возятся с этим параметром и может установить что-то непригодное.

...