Javaでのユーザー設定/データベース/キャッシュ…の保存(すべてのOSで)
-
22-07-2019 - |
質問
私のJavaアプリケーションは「user.home」にデータを保存していますが、Windowsではアプリケーション情報を保存する正しいパスではないようです(友人が私に言ったように)。他のオプションは設定APIを使用することですが、設定APIを使用してhsqldbの場所を設定することはできません。また、すべてのファイルを同じフォルダー(ローカルデータベース、構成、キャッシュなど)で使用できるようにします。
OS固有の処理を行うサンプルコードまたはフレームワークを探しています。
解決
WinXP Pro SP3システムでは、user.homeは C:\ Documents and settings \< username>
を指します。
多くのアプリケーションはデータをそこに保存するだけで(このパス+アプリケーションデータの代わりに、他のいくつかはそこに行きます)、UNIXスタイルのディレクトリを作成します。ドット+アプリケーション名(例:.antexplorer、.sqlworkbench、.squirrel-sql、.SunDownloadManager、.p4qt、.gimp-2.4など)。
まともな慣習のように見えます...
他のヒント
ウィンドウアプリがuser.homeにデータを保存し、「間違った」データを保存することはまれです。 Windowsアプリケーションは、データを場所全体に広げるのが大好きです(レジストリに少し、アプリケーションのインストールディレクトリに少し、Windowsディレクトリに少し、System32に少し、ここに少しずつ)。最終的に、これにより、有名な「Windows rot」を引き起こす何かをきれいにバックアップまたは削除することができなくなります。 (つまり、数か月ごとに再インストールする必要があります)。
とにかく。本当にuser.homeを使用したくない場合(そして、そうしない理由はない)、 Apache commons-langのを使用して、Windowsで実行しているかどうかを確認します。これが真の場合、ユーザーがデータを保存する場所を指定できるディレクトリ選択ダイアログをポップアップします。
この情報を環境設定に保存し、次回アプリを起動するときにこのパスを使用します。このようにして、ユーザーはデータの必要な場所を指定でき、設定に1ビットの情報を残すだけで済みます。
アプリケーションの場合" foo" " .foo"という名前のディレクトリを作成しますuser.home内。 Windowsでは少し奇妙に見えますが、そのディレクトリを見る人はほとんどいません(そして、とにかくあいまいなディレクトリでいっぱいです)、Linux / Solaris / ...では、ユーザーのホームディレクトリを混乱させない隠しディレクトリになります視覚的に。
(コードから)環境変数 APPDATA
の値を動的に読み取り、構成ファイルを%APPDATA%\\。myapp \ config
==>値はプラットフォームに依存し、ハードコードされたパスを使用せず、常にenvを読み取ります。 var。
問題はWiindowsではなく、標準のJavaセットアップです。
長い議論 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4787931>こちら
コマンドラインの「-D MYLOC =%USERPROFILE%」プロパティでこれを選択することをお勧めします。
" USERPROFILE"のみが取得されることに注意してください。ユーザーがデスクトップログインを行った場合、ユーザーがcitrixなどでリモートでログインした場合、またはsshを介してリモートでログインした場合、これは設定されません。