java读取注册表

废话不多说,我就是要读注册表。

百度之后大部分的结果都来自这一篇浏览量快要超过10万的大作:http://xiaohuafyle.iteye.com/blog/1543559

但好死不死这个解决不了我的问题,文中提到两个方法。

(1)使用JDK提供的Preferences类 

这方案很方便,也没用任何第三方jar包,但它只能读写HKEY_LOCAL_MACHINE\Software\JavaSoft\prefs下的注册表值,而我是要读写其他非java软件的注册表值。

(2)使用JRegistry或者JNIRegistry

这两个第三方类库都是使用一个dll和一个jar,但这两个第三方都很早就停更了,一个08年一个12年。这导致作者没有提供64位的dll,这让不精通.NET的开发者情何以堪。


最终方案:

网上有个人直接使用java调windows脚本。这成为我唯一可以使用的方案。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class GetReg {
	public static void main(String[] args) {
		try {
			Process ps = null;
			//当路径中有空格时,要把路径打上引号。
			ps = Runtime.getRuntime().exec("reg query \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\360Safe\"");
			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();
		}
	}
}



当系统为X86:一般软件注册表在"HKEY_LOCAL_MACHINE\SOFTWARE\"下
当系统为X64,程序也是X64:同上
如果架构为X64,但程序是32位,单独放在这里"HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node"
再往下目录通常是公司名\大类型\小类型\产品名\子产品名\键值对
但也有简化的,我的目标软件注册表仅仅有两层:公司名\产品名\键值对


附赠判断本系统是64位还是32位的代码:

System.out.println(System.getProperty("sun.arch.data.model"));

X64:64

X86:32


参考资料:

http://xiaohuafyle.iteye.com/blog/1543559

http://blog.csdn.net/mylovepan/article/details/8000237


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值