java代码实现注册表的修改增加操作

java代码操作注册表

我们使用java代码操作注册表的时候使用的java原生的工具java.util.prefs 。
这个工具只能够操作一个固定路径下面的值,代码里面给出了。
之前打算用com.ice.jni.registry.Registry这个工具,但是花了一上午时间,实在没有办法在32位环境下进行运行该工具对应的dll,只能够退求其次使用java原生的注册表操作工具类。

工具类代码,可以直接使用


import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;

/**
 * @Author: zhangjun
 * @Description:  注册表路径为HKEY_LOCAL_MACHINE\Software\JavaSoft\prefs\supermap/S/G/S
 * 节点不要出现大写字母,不然在注册表中的项前就加了一个“/”;也不能出现中文,不然就转字符了,转到你不认识。。。
 * @Date: Create in 11:53 2020/4/27
 */
public class OperateRegistryUtils {

    /**
     * 把相应的值储存到变量中去 如果没有对应的节点,会自己创造一个对应的节点
     */
    public static void writeValue(String productparentnode,String productname,String keys ,String values) {
        // HKEY_LOCAL_MACHINE\Software\JavaSoft\prefs下写入注册表值.
        Preferences pre = Preferences.userRoot().node("/"+productparentnode+"/"+productname);
            pre.put(keys, values);
    }
    public static void writeValue(String productparentnode,String keys ,String values) {
        // HKEY_LOCAL_MACHINE\Software\JavaSoft\prefs下写入注册表值.
        // Preferences.userRoot(). 还有  Preferences.SystemRoot().的区别在我看来就是一个需要改注册表的读取权限,一个不用
        Preferences pre = Preferences.userRoot().node("/"+productparentnode);
        pre.put(keys, values);
    }

    /***
     * 根据key获取value
     *
     */
    public static String getValue(String productparentnode,String productname,String key) {
        Preferences pre = Preferences.userRoot().node("/"+productparentnode+"/"+productname);
        return pre.get(key, "");
    }

    public static String getValue(String productparentnode,String key) {
        Preferences pre = Preferences.userRoot().node("/"+productparentnode);
        return pre.get(key, "");
    }

    /***
     * 清除注册表
     *
     * @throws BackingStoreException
     */
    public static void clearValue(String productparentnode,String productname) throws BackingStoreException {
        Preferences pre = Preferences.userRoot().node("/"+productparentnode+"/"+productname);
        pre.clear();
    }

    /**
     * 谨慎使用,不然会删除该注册表目录的所有子目录结构
     * @param productparentnode
     * @throws BackingStoreException
     */
    public static void clearValue(String productparentnode) throws BackingStoreException {
        Preferences pre = Preferences.userRoot().node("/"+productparentnode);
        pre.clear();
    }

    public static void main(String[] args) {

        try {
           OperateRegistryUtils.writeValue("supermapSGS","iserver","setupVersion","9.1");
           OperateRegistryUtils.writeValue("supermapSGS","test","setupVersion","2.1");
           OperateRegistryUtils.writeValue("supermapSGS","iserver","setupLocal","E:\\");
           OperateRegistryUtils.writeValue("supermapSGS","test","setupLocal","E:\\");
           OperateRegistryUtils.writeValue("supermapSGS","datamanger","setupVersion","1");
           OperateRegistryUtils.writeValue("supermapSGS","datamanger","setupLocal","E:\\");


          //OperateRegistryUtils.writeValue("supermapSGS","datamanger","setupVersion","1.3");
          // OperateRegistryUtils.writeValue("supermapSGS","datamanger","setupLocal","E:\\CTCode");
        }catch (Exception e){

        }
        System.out.println(OperateRegistryUtils.getValue("supermapSGS","datamanger","setupLocal"));
     try {
        // OperateRegistryUtils.clearValue("datamanger");
        } catch (Exception e) {
            e.printStackTrace();
       }

        //可以读取任意路径下的
       /* try {
            Process ps = null;
            ps = Runtime.getRuntime().exec("reg query HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Prefs\\supermapSGS");
            ps.getOutputStream().close();
            InputStreamReader i = new InputStreamReader(ps.getInputStream());
            String line;
            BufferedReader ir = new BufferedReader(i);
            while ((line = ir.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }*/
    }

}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值