aqubi+shin1

Recent site activity

java‎ > ‎

Javaでレジストリ登録

プログラムからレジストリに情報保存・・・って結構便利なんですが、使う人にとったら、ちょっと(`×´)丿ウザイ!! でも・・・やっぱキニナル? ってことで Javaでレジストリ登録方法のご紹介。

Javaでそんな事できるのって全然知らなかったんですが、この前 他人のソースみて知りました

まず 使用するクラス は

java.util.prefs.Preferences

です。

このクラスが OSとの橋渡しをしてくれるクラスになります。
JavaDoc見て見ると・・・

設定データの階層的な集合の中の 1 つのノードです。このクラスを使用して、アプリケーションからユーザおよびシステムの設定データと構成データを格納および取得できます。このデータは、実装に依存したバッキングストアに永続的に格納されます。たとえば、フラットファイル、OS 固有のレジストリ、ディレクトリサーバ、SQL データベースなどのバッキングストアに格納されます。このクラスを使用するときに、バッキングストアの詳細を把握している必要はありません。

私には 難しい日本語ですが 情報を「永続的に格納」できるが、その実装は OSに依存してますよ。って事で、

WindowsOSだと レジストリに登録
Linux だと ファイルに出力
($HOME/.java/.userPrefs/****/prefs.xml)

するようです。

登録方法の例としては
Preferences root = Preferences.userRoot();
Preferences node = root.node("/test/preferences");
node.put("name", "preferences登録");
って感じ。

最初の一行目は
userRoot(); は 「ユーザ固有の情報」として登録 (他のユーザでOSをログインしなおしたら、そのユーザからは見えない情報) する方法です。
systemRoot(); ってしたら 「システム全体」として登録 になります。

2行目で 任意のノードを取得して 3行目で値設定! って感じ。 値取得するには node.get("name", "") ・・・など getメソッドを使います。

Windowsのレジストリも Tree形式になっているのを 考えると インターフェースがTree形式になっているのも 容易に理解できますよね。

Linuxで動かしたときのファイルは・・・XMLになっていました。
DTDは
http://java.sun.com/dtd/preferences.dtd
みたい。

んでー ちょっとハマってしまったのが、
Fedora Core 5 で 最初から入っていた
JAVA GNU libgcj を使って実行すると、Preferences が うまく動かない って事。

動かない・・・ って内容は、Preferences登録したJavaVMを一度終了して、違うVMから情報を参照しようとすると・・・情報が参照できない。
pref.xml ってファイルも出力されていない。
って状況で。

結局は JAVA GNU libgcj では 使えない(っていうか 実装されていない?) んだな。で終わってしまいましたが。。

後日補足。。。
JavaからPreferences.userNodeForPackageで登録したら、 HKEY_CURRENT_USER¥Software¥JavaSoft¥Prefs に格納されてました。