Java通过CMD方式读取注册表任意键值对

需要读取如图所示注册表【HKEY_LOCAL_MACHINE\SOFTWARE\EasyDrv7】节点下的【DateTime】的值


image.png

直接上代码:

package com.beibei.common.util.cmd;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 注册表操作工具类
 * @author 北北
 * @date 2019年6月19日下午8:21:02
 */
public class RegistryUtil {
    
    private static Logger logger = LoggerFactory.getLogger(RegistryUtil.class);
    
    /**
     * <pre>
     * 读取注册表指定节点所有的键值对
     * </pre>
     * @author 北北
     * @date 2019年6月19日下午8:43:56
     * @param nodePath
     * @return
     */
    public static Map<String, String> readNode(String nodePath) {
        Map<String, String> regMap = new HashMap<>();
        try {
            Process process = Runtime.getRuntime().exec("reg query " + nodePath);
            process.getOutputStream().close();
            InputStreamReader isr = new InputStreamReader(process.getInputStream());
            String line = null;
            BufferedReader ir = new BufferedReader(isr);
            while ((line = ir.readLine()) != null) {
                String[] arr = line.split("    ");
                if(arr.length != 4){
                    continue;
                }
                regMap.put(arr[1], arr[3]);
            }
            process.destroy();
        } catch (IOException e) {
            logger.error("读取注册表失败, nodePath: " + nodePath, e);
        }
        return regMap;
    }
    
    /**
     * <pre>
     * 读取注册表指定节点指定key的值
     * </pre>
     * @author 北北
     * @date 2019年6月19日下午8:43:24
     * @param nodePath
     * @param key
     * @return
     */
    public static String readValue(String nodePath, String key) {
        Map<String, String> regMap = readNode(nodePath);
        return regMap.get(key);
    }
    
    public static void main(String[] args) {
        String paramValue = RegistryUtil.readValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\EasyDrv7", "DateTime");
        System.out.println(paramValue);
    }
}

其原理是通过CMD命令【reg query HKEY_LOCAL_MACHINE\SOFTWARE\EasyDrv7】 读取节点全部键值对,再通过解析得到我们所需要的【DateTime】的值。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这篇文章几乎几乎原封不动的搬过来了这位博主的内容,作为自己以后查询方便用~ reference:http://bl...
    DeamoV阅读 20,772评论 3 33
  • 摘抄:http://blog.163.com/sbtaot/blog/static/128303760200982...
    cqlina阅读 4,584评论 0 5
  • http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 当给sq...
    xuningbo阅读 10,556评论 2 22
  • sqlmap用户手册 说明:本文为转载,对原文中一些明显的拼写错误进行修正,并标注对自己有用的信息。 ======...
    wind_飘阅读 2,202评论 0 5
  • 1.女儿跟爸爸说:爸爸,我不想结婚。 爸爸说:你要结婚呀!(实际上爸爸心里在说,我当年要是不结婚应该现在就成名成家...
    胡涂格格阅读 140评论 0 0

友情链接更多精彩内容