1. 程式人生 > >Java 之登錄檔操作

Java 之登錄檔操作

Windows Registry API Native Interface下載地址 http://www.trustice.com/java/jnireg/index.shtml 下 registry-3.1.3.zip(包含原始碼)。解開 registry-3.1.3.zip,在 bin 目錄中可以看到兩個檔案 ICE_JNIRegistry.dll 和registry.jar,動態庫就是原生代碼實現。

import com.ice.jni.registry.*;
import java.text.SimpleDateFormat;
/**
* java 操作登錄檔
* @author 李志遠
*/
public class RegeditTool {
    static SimpleDateFormat shortDateFormat = new SimpleDateFormat

("yyyy-MM-dd");
/** Creates a new instance of test */

    // 把資訊儲存到登錄檔HKEY_LOCAL_MACHINE下的某個節點的某一變數中,有則

修改,無則建立
    public static boolean setValue(String folder, String subKeyNode,
            String subKeyName, String subKeyValue) {
        try {
            RegistryKey software = Registry.HKEY_LOCAL_MACHINE
                    .openSubKey(folder);
            RegistryKey subKey = software.createSubKey(subKeyNode, "");
            subKey
                    .setValue(new RegStringValue(subKey, subKeyName,
                            subKeyValue));
            subKey.closeKey();
            return true;
        } catch (NoSuchKeyException e) {
            e.printStackTrace();
        } catch (NoSuchValueException e) {
            e.printStackTrace();
        } catch (RegistryException e) {
            e.printStackTrace();
        }
        return false;
    }

    // 刪除登錄檔中某節點下的某個變數
    public static boolean deleteValue(String folder, String subKeyNode,
            String subKeyName) {
        
        try {
            RegistryKey software = Registry.HKEY_LOCAL_MACHINE
                    .openSubKey(folder);
            RegistryKey subKey = software.createSubKey(subKeyNode, "");
            subKey.deleteValue(subKeyName);
            subKey.closeKey();
            return true;
        } catch (NoSuchKeyException e) {
            System.out.println("NOsuchKey_delete");
        } catch (NoSuchValueException e) {
            System.out.println("NOsuchValue_delete");
        } catch (RegistryException e) {
            e.printStackTrace();
        }
        return false;
    }

    // 刪除登錄檔中某節點下的某節點
    public static boolean deleteSubKey(String folder, String

subKeyNode) {
        try {
            RegistryKey software = Registry.HKEY_LOCAL_MACHINE
                    .openSubKey(folder);
            software.deleteSubKey(subKeyNode);
            software.closeKey();
            return true;
        } catch (NoSuchKeyException e) {
            e.printStackTrace();
        } catch (RegistryException e) {
            e.printStackTrace();
        }
        return false;
    }
    // 開啟登錄檔項並讀出相應的變數名的值
    public static String getValue(String folder, String subKeyNode,
            String subKeyName) {
        String value = "";
        try {
            RegistryKey software = Registry.HKEY_LOCAL_MACHINE
                    .openSubKey(folder);
            RegistryKey subKey = software.openSubKey(subKeyNode);
            value = subKey.getStringValue(subKeyName);
            subKey.closeKey();
        } catch (NoSuchKeyException e) {
            value = "NoSuchKey";
            // e.printStackTrace();
        } catch (NoSuchValueException e) {
            value = "NoSuchValue";
            // e.printStackTrace();
        } catch (RegistryException e) {
            e.printStackTrace();
        }
        return value;
    }
    // 測試
    public static void main(String[] args) {
        setValue("SOFTWARE", "Microsoft\\Windows\\CurrentVersion\\Run",

"test",
                "C:\\1.exe");
    }
}