Java通过CMD方式读取注册表任意键值对代码实践
作者:yaominghui 发布时间:2021-10-10 19:56:40
标签:hava,cmd,注册表,键,值
需要读取如图所示注册表【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】
的值。
来源:https://www.jianshu.com/p/f7a62b9aaa13


猜你喜欢
- SnackBar是DesignSupportLibrary中的一个重要的控件,用于在界面下面提示一些关键信息,跟Toast不同的地方是Sna
- 1)1、1、2、3、5、8.......用递归算法求第30位数的值?首先我们能够发现从第3位数起后一位数等于前两位数值之和,即:x=(x-1
- 在maven的pom.xml里面添加一下依赖:<properties><project.build.sourceEncod
- 本文实例讲述了Java集合定义与用法。分享给大家供大家参考,具体如下:java集合大体可分为三类,分别是Set、List和Map,它们都继承
- 在Unity开发中捕捉Android的常用事件其实很简单Input.GetKey(KeyCode.Escape) Input.G
- JAVA基础八股文Switch能支持哪些类型?jdk5之前,switch能够作用在byte,short,char,int(实际上都是提升为i
- Java中的main函数的详细介绍JAVA中的主函数是我们再熟悉不过的了,相信每个学习过JAVA语言的人都能够熟练地写出这个程序的入口函数,
- String的字符串是不可变的,StringBuffer和StringBuilder是可变的String:是字符常量,适用于少量的字符串操作
- 某天突然发现idea非常重要的快捷键ctrl+shift+f无效了,网上搜了很多都说是qq快捷键冲突,但是找了下qq快捷键却没有解决,现在给
- 本文实例讲述了C#进程监控方法。分享给大家供大家参考。具体如下:using System;using System.Collections.
- 本文以C#代码为例介绍如何实现将彩色PDF文件转为灰度(黑白)的PDF文件,即 将PDF文档里面的彩色图片或者文字等通过调用PdfGrayC
- Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策略,因此可以说Spring容器中的Bean本身不具备线程安全
- 用户User的注册类型有Super和Common两种public eumn RegistrationType{ &nb
- 本文详述了android抽奖程序的实现方法,程序为一个抽奖大转盘代码,里面定义了很多图形方法和动画。实现主要功能的SlyderView.ja
- 引言:在使用循环的时候,循环里面带有break、continue、return的时候经常弄混,今天特意整理了下,以待后用... f
- 一般入参我们都会转为vo对象。那么直接在对象的属性上注解即可。 其实spring用的是hibernate的validator.步骤1.配置s
- 一、java异常总结:异常就是程序运行时出现不正常运行情况1.异常由来:通过java的类的形式对现实事物中问题的描述,并封住成了对象其实就是
- 我们通过一个完整的实例来实现课程信息管理功能的操作,包括查询、修改、删除课程信息的操作。为了简化实例,添加课程信息的操作直接在 SQL Se
- 【前言】AOP(Aspect Orient Programming),我们一般称为面向方面(切面)编程,作为面向对象的一种补充,用于处理系统
- 很多时候需要先判断当前用户的网络,才会继续之后的一些处理逻辑。但网络类型获取这一块,我用我自己的的手机调试时遇到一些问题,这里记录一下。一加