Java对Windows注册表进行增删查

代码描述

    用java对windows注册表进行编辑是一个比较困难的任务,因为java的平台无关性.但是java提供了Runtime类,它允许把原始的command命令直接发生送给OS,所以可以通过这个类来实现对注册表简单有效的管理.

    这里允许的基本功能是添加、删除和查询注册表信息.根据key查询出value和type分别存放在不同的变量中.

    //主要的方法

    add(String location, String key, String type, String value);

    delete(String location, String key);

    query(String location, String key);

    //查询消息用到的方法

    getKey() => 检索的key名.

    getValue() => 根据key得到的value

    getType() => 根据key得到的数据类型 (REG_SZ, REG_BINARY, 等)

    调用方法

    例:

    public static void main(String[] args) {

    try {

    RegKeyManager rkm = new RegKeyManager();

    //            64位系统的注册表目录

    //            rkm.query(“HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Tencent\\QQ2009”, “Install”);

    //            32位系统的注册表目录

    rkm.query(“HKEY_LOCAL_MACHINE\\SOFTWARE\\Tencent\\QQ2009”, “Install”);

    System.out.println(“KEY: ” + rkm.getKey() + “ DATA TYPE: ” + rkm.getType() + “ DATA VALUE: ” + rkm.getValue());

    //            rkm.add(“HKEY_LOCAL_MACHINE\\SOFTWARE\\Tencent\\QQ2009”,“TESTING”,“REG_SZ”,“VALUE DATA”);

    //            rkm.delete(“HKEY_LOCAL_MACHINE\\SOFTWARE\\Tencent\\QQ2009”,“TESTING”);

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    注:64位系统注册表路径是不同的上面的代码实现了在qq的注册表路径下查询出qq的安装路径(对于获取QQ的安装路径前段时间写过一篇类似的文章,如果你感兴趣的话可以参看JAVA通过注册表获取软件的安装路径),在安装路径下添加一个注册表信息,然后删除添加的信息.

    package info.itlanguageexpress.java;

    import java.io.*;

    public class RegKeyManager {

    private final String TYPES[] = { “SZ”, “BINARY”, “DWORD”, “QWORD”, “DWORD_LITTLE_ENDIAN”, “QWORD_LITTLE_ENDIAN”, “DWORD_BIG_ENDIAN”, “EXPAND_SZ”, “LINK”, “MULTI_SZ”, “NONE”, “RESOURCE_LIST” };

    private String type = “”, value = “”, key = “”;

    protected void query(String loc, String k) throws Exception {

    Process p = Runtime.getRuntime().exec(“reg QUERY \”“ + loc + ”\“ /v \”“ + k + ”\“”);

    BufferedReader in = new BufferedReader( new InputStreamReader( p.getInputStream() ) );

    String out = “”;

    while ( ( out = in.readLine() ) != null ) {

    if (out.matches(“(.*)\\s+REG_(.*)”)) { break; }

    }

    in.close();

    String str[] = out.split(“    ”);

    int b = 0;

    for (int a=0; a < str.length; a++) {

    if ( str[a].replace(“ ”, “”).matches(“\\S+”) ) {

    switch (b) {

    case 0: key = str[a]; break;

    case 1: type = str[a]; break;

    case 2: value = str[a]; break;

    }

    b++;

    }

    }

    }

    protected String getKey() { return key; }

    protected String getType() { return type; }

    protected String getValue() { return value; }

    protected boolean add(String loc, String name, String dType, String value) throws Exception {

    boolean comp = false, valid = false;

    for (int a = 0; a < TYPES.length; a++) {

    if (dType.equalsIgnoreCase(“REG_” + TYPES[a])) { valid = true; break; }

    }

    if ( valid ) {

    Process p = Runtime.getRuntime().exec(“reg ADD \”“ + loc + ”\“ /v \”“ + name + ”\“ /t \”“ + dType + ”\“ /d \”“ + value + ”\“”);

    BufferedReader in = new BufferedReader( new InputStreamReader( p.getInputStream() ) );

    String out = “”;

    while ( (out = in.readLine() ) != null ) {

    if (out.equalsIgnoreCase(“The operation completed successfully.”)) { comp = true; }

    }

    in.close();

    }

    return comp;

    }

    protected boolean delete(String loc, String key) throws Exception {

    boolean comp = false;

    Process p = Runtime.getRuntime().exec(“reg DELETE \”“ + loc + ”\“ /v \”“ + key + ”\“ /f”);

    BufferedReader in = new BufferedReader( new InputStreamReader( p.getInputStream() ) );

    String out = “”;

    while ( ( out = in.readLine() ) != null ) {

    if (out.equalsIgnoreCase(“The operation completed successfully.”)) { comp = true; }

    }

    in.close();

    return comp;

    }

    }

原文地址:http://java.chinaitlab.com/advance/909725.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值