プログラムからレジストリに情報保存・・・って結構便利なんですが、使う人にとったら、ちょっと(`×´)丿ウザイ!!
でも・・・やっぱキニナル? ってことで 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 に格納されてました。
|