21

アプリケーションの設定を保存する ini ファイルを作成したいと考えています。jar ファイルの場所を見つけて、そこに ini ファイルを作成するのは良い考えですか? はいの場合、どうすればjarファイルの場所を見つけることができますか?

しかし、このような問題に対するより良い解決策をご存知でしたら、そのいくつかをお聞きしたいと思います。

EDIT:私はMacを使用していますが、同じアプリケーションをWindowsで実行したいと考えています。System.getProperty("user.home") ディレクトリに何かを書き込むこともできますが、ユーザーがアプリを削除することを決定した場合は、システムをクリーンに保ちたいと考えています。たとえば、アプリケーションと同じディレクトリに設定ファイルを保存するより良い方法はありませんか?

4

6 に答える 6

22

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 では、My Documentsの下に配置されるため、ユーザーが検索しない限り、ディレクトリは表示されません。

于 2008-10-11T11:35:11.810 に答える
8

設定が (手動で編集するのではなく) アプリケーションによってのみ書き込まれる場合は、Preferences APIの使用を検討してください。

于 2008-10-11T12:01:32.270 に答える
1

INIファイルの代わりに.propertiesファイルを使用するというアイデアは良いことです。また、機密データをそこに保存する場合は、暗号化することを検討してください。これをチェックしてください:

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

またはこれ:

Javaでプロパティファイルの値を暗号化および復号化します

于 2012-01-19T17:18:54.663 に答える
1

アプリケーションのインストール ディレクトリに一時ファイルを保存しないでください。アプリケーションを実行しているユーザーは、そのディレクトリへの書き込みアクセス権を持っていない可能性があることに注意してください。そのようなものを配置する最も安全な場所は、C:\Documents and Settings\username\Application Data\ApplicationName フォルダーです (必要に応じて名前を調整します)。

とはいえ、私はおそらくそのようなものをコンピューター上のファイルではなくレジストリに保存するでしょう. (しかし、それは私だけです。)

于 2008-10-11T00:39:28.670 に答える
1

通常の状況下で、ini を人間が読み書きできるようにする必要があるかどうかによって異なります。そうでない場合は、ini ファイルではなくプロパティ ファイルを使用して、それを「user」ディレクトリに保存できます。

jar ファイルの検索に関しては、jar からロードされることがわかっているクラスの ClassLoader を検索し、それが適切なタイプの ClassLoader であること (つまり、実際に jar からロードされたものであること) を確認し、抽出する必要があります。そこからの道。それが本当に必要な場合は、おそらくこれを行うためのコードを掘り下げることができます。私は必ずしもそれをお勧めしません。

編集user.home プロパティは、安全に使用できるユーザー ディレクトリを提供します。

于 2008-10-11T00:42:01.987 に答える
1

通常、Java プログラマーは .ini ファイルではなく、.properties ファイル (別の形式) を使用します。適切なプログラム ラッパーとして java.lang.Properties クラスを使用できます。

クラスの .class メンバーで getProtectionDomain().getCodeSource().getLocation() を呼び出すことで jar ファイルの場所を取得できますが、これを行うことはお勧めしません。

代わりに、ファイルを System.getProperty("user.home") ディレクトリ (ユーザーのホーム ディレクトリ) に書き込みます。それが本当に一時的なものである場合は、System.getProperty("java.io.tmpdir")

于 2008-10-11T00:46:47.157 に答える