java读取注册表
2015-07-29 18:02
447 查看
废话不多说,我就是要读注册表。
百度之后大部分的结果都来自这一篇浏览量快要超过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脚本。这成为我唯一可以使用的方案。
当系统为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万的大作: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
相关文章推荐
- JAVA基础点汇总(二)
- Java编程思想:第2章 一切都是对象
- spring 多线程
- 删除JDK报错:Error: could not open `C:\Program Files\Java\jre6\lib\i386\jvm.cfg'
- Eclipse中在android项目中出现新建一个Activity后,出现整个工程的报错以及包导入以后无法运行等等情况分析。
- 用泛型的extends影响struts2的数据封装
- java字符串大小写转换的两种方法
- [150729]spring+websocket整合(springMVC+spring+MyBatis即SSM框架和websocket技术的整合)
- [LeetCode][Java] Sum Root to Leaf Numbers
- Java实现二分查找算法实例分析
- 应一个好友要求写一个SpringJDBC 的文章 , 介绍返回操作数据库最新id写法
- Java 通过反射调用方法
- mac android eclipse 配置问题
- Java基础学习总结(41)——JPA常用注解
- Java基础学习总结(41)——JPA常用注解
- Java基础学习总结(41)——JPA常用注解
- Java类加载器
- java使用ArrayList遍历及效率比较实例分析
- java字符编码转换研究
- JAVA自学路线图