web-dev-qa-db-ja.com

Javaでいくつかの設定を保存するための.INIファイルを作成するにはどうすればよいですか?

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

しかし、あなたがこのような何かのためのより良い解決策を知っているなら、私はそれらのいくつかを聞きたいです。

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

21
Lipis

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では、マイドキュメントの下に配置されるため、ユーザーはディレクトリを探しに行かない限り、ディレクトリは表示されません。

22
McDowell

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

8
Dan Dyer

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

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

またはこれ:

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

1
Radu Murzea

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

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

1
BoltBait

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

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

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

1
Draemon

通常、Javaプログラマーは.iniファイルを使用しませんが、.propertiesファイル(異なる形式)を使用します。使用する場合は、Java.lang.PropertiesクラスをNiceプログラムラッパーとして使用できます。

canクラスの.classメンバーでgetProtectionDomain()。getCodeSource()。getLocation()を呼び出してjarファイルの場所を取得している間、私はしないお勧めしますこれを行う。

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

1
Chris Boran