JAVA操作windowsレジストリ


http://www.blogjava.net/hadeslee/archive/2007/09/20/146881.html
私たちがプログラムを書くとき、ユーザー名や他のデータの保存を要求することがありますが、このようなデータはプログラムの同じディレクトリの下に保存されているわけではありません.これは明らかで、安全ではありません.どうすればいいですか.この时、もしデータをレジストリの中に保存することができるならば、それはどんなに良くて、1つは隠れて、2つは便利で、プログラムのディレクトリの下で1枚の大きいファイルを生成することはありません.
JAVAではjava.util.prefs.Preferencesでレジストリを操作できますが、例を見てみましょう

/*
 * Test3.java
 * 
 * Created on 2007-9-20, 18:41:41
 * 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package test1;

import java.util.prefs.Preferences;

/**
 *
 * @author hadeslee
 */
public class Test3 {
    
    public static void main(String[] args)throws Exception {
        Preferences pre=Preferences.systemNodeForPackage(Test3.class);
        pre.put("userName", "hadeslee");
        pre.putInt("age", 25);
        pre.flush();
        Preferences now=Preferences.systemNodeForPackage(Test3.class);
        System.out.println(now.get("userName", "  "));
        System.out.println(now.getInt("age", 0));
        
    }
}

これは最も簡単な例で、最初の文はパッケージに基づいてノードを得て、それからいくつかの値を入れて、String、boolean、int、long、float、doubleなどの値を入れて、もしあなたがオブジェクトに保存したいならば、オブジェクトをbyte[]にシーケンス化して、それから保存して、それから読んでも同じです.私たちはこのように操作してMapを操作しているようです.すべての値はこのマッピングに存在する.
では、どこに保存されていますか?
システムノードが選択されている場合は[HKEY_LOCAL_MACHINESOFTWAREJavaSoftPrefs]に保存されます.
userNodeが選択されている場合...   [HKEY_CURRENT_USERSoftwareJavaSoftPrefs]に保存
のサブノードの下
しかし、もし私たちがプログラムをプラットフォームにまたがりたいなら、これはあまりよくありません.私はlinuxで試したことがあります.プログラムが終了するたびに、私が設定した値はありません.linuxの下にはwindowsのようなレジストリがありません.linuxの下でSUNがどのように実現されているのか分かりません.移植性のためにjava.uitl.Propertiesというクラスを使ったほうがいいです.テキストマッピングファイルに基づいて値の操作を行いますが、Stringオブジェクトにしか格納できない点もあります.byte[]のように保存できません.保存するものが複雑すぎる場合は、いっそデータベースを直接使いましょう.:)