アプリケーションの設定に java.util.prefs.Preferences を使用しています。そして、それらの設定を手動で編集する機能が必要です。Windowsレジストリの代わりにファイルに保存することは可能ですか? または、java.util.prefs.Preferences の代わりに別のメカニズムを使用する必要がありますか?
7 に答える
Preferences APIを引き続き使用したいが、ファイルに書き込む場合は、このSOの投稿で詳しく説明されているように、新しいPreferencesFactoryが必要になります。
次の2つの方法を使用します。
Preferences.exportSubtree(OutputStream os)
と
Preferences.importPreferences(InputStream is)
これは別の投稿で説明されています、ここ
Properties prop = new Properties();
InputStream in = getClass().getResourceAsStream("foo.properties");
prop.load(in);
in.close()
しばらく前に、レジストリから設定を読み取るが、レジストリには書き込まない Preferences クラスの実装を考え出す必要がありました。これを実現するために、AbstractPreferences から ReadOnlyPreferences クラスを派生させました。後で、ファイルに出入りするために必要な機能とまったく同じ機能が必要になりました。ReadOnlyPreferences クラスを拡張して sync() と flush() をオーバーライドし、ファイルの同期を維持しました。これについてのクールな部分は、読み取り対象のレジストリに実際には何も存在しないため、設定の通常の使用とまったく同じロジックを使用して値にデフォルトを適用することです。基本クラスから exportSubtree() と importPreferences() を使用してファイルの同期を維持し、面倒な作業をすべて実行しました。
申し訳ありませんが、コードを所有していないため投稿できませんが、次のリンクにある暗号化された設定を出発点として使用しました。それが私がやったことであり、コードを書くよりもはるかに簡単なコードを捨てて、必要なものだけを抽出するのに約1時間かかりました! 最初のものをクリックしたくない場合は、次のリンクで Dobbs 博士にも公開されています。dobbs の記事で、ソース全体を簡単にダウンロードできる場所を見たことがありません。いずれにせよ、この記事は私がこれまでに見た環境設定の拡張に関しては最高のものです。
http://www.panix.com/~mito/articles/#ep
http://www.drdobbs.com/security/encrypted-preferences-in-java/184416587?pgno=4