2000年3月13日星期一

Java读写注册表

package getpathfromregedit;

import com.ice.jni.registry.Registry;
import com.ice.jni.registry.RegistryKey;
import com.ice.jni.registry.RegStringValue;
import com.ice.jni.registry.*;

//准备工作:
//1 需要引入 registry.jar 到工程中。
//2 需要将ICE_JNIRegistry.dll 拷贝到系统的 system32目录或者工程的根目录下面。
public class GetPath {
 Registry reg = new Registry();

 // 修改注册表中键值:
 // Root/HKEY_LOCAL_MACHINE/SOFTWARE/Firebird Project/FirebirdServer/Instances
 public void setRegeditValue(String pathStr, String attrName, String value) {
  String[] paths = pathStr.split("[_]");

  RegistryKey openLevel0 = reg.HKEY_LOCAL_MACHINE;
  
  try {
   for (int i = 0; i < paths.length - 1; i++) {
    String partKey = paths[i];
    openLevel0 = openLevel0.openSubKey(partKey);
   }
   // 获得键 Instances。
   String lastKeyStr = paths[paths.length - 1];
   RegistryKey subKey = openLevel0.createSubKey(lastKeyStr, "");
   
   // 设定键值。
   subKey.setValue(new RegStringValue(subKey, attrName, value));
   System.out.println("设定 "+pathStr+" 下 "+attrName+" 的属性值为:"+value);
  } catch (Exception ex) {
   ex.printStackTrace();
  }
 }

 // 从注册表中读取 
 // Root/HKEY_LOCAL_MACHINE/SOFTWARE/Firebird Project/FirebirdServer/Instances
 // 的 DefaultInstance 属性值。此方法要求查询用的键值之间要用"_"分隔。
 public String getRegeditValue(String pathStr, String attrName) {
  String resPath = "";
  String[] paths = pathStr.split("[_]");
  RegistryKey openLevel0 = reg.HKEY_LOCAL_MACHINE;
  
  try {
   for (int i = 0; i < paths.length; i++) {
    String partKey = paths[i];
    openLevel0 = openLevel0.openSubKey(partKey);
   }
   // 获得键值。
   resPath = openLevel0.getStringValue(attrName);
  } catch (Exception ex) {
   ex.printStackTrace();
  }
  System.out.println("查询到的 "+pathStr+" 下 "+attrName+" 的属性值为: "+resPath);
  return resPath;
 }

 public static void main(String[] args) {
  GetPath opRegedit = new GetPath();

  String pathStr = "SOFTWARE_Firebird Project_Firebird Server_Instances";
  String attrName = "DefaultInstance";
  String valueStr = "C: Program Files Firebird Firebird_1_5 ";

  // 设定注册表相应键值的值.
  opRegedit.setRegeditValue(pathStr, attrName, valueStr);
  // 读取注册表相应键值的值
  opRegedit.getRegeditValue(pathStr, attrName);
 }
}

没有评论:

发表评论