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

时间:2021-05-20

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

直接上代码:

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】的值。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章