`
icejadelove
  • 浏览: 138176 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java操作注册表

阅读更多

最近写个小程序,需要程序在安装后,每次机器启动后,程序就要运行,所以得改变注册表,开始想通过.bat批处理进行操作,于是就学习了下批处理操作,哎。。。命令烦,学着差点吐掉。。想想,还是找找好兄弟java的办法吧,于是google了几下,很惊喜,原来它真的可以,而我却一直不晓得 - - ! 先是,尝试了一种方法:JNI的方式,这种方法中,能够创建子节点,然后给节点中set值,可是怎么在已存在节点中set值,试了半天,报错:Exception in thread "main" java.lang.OutOfMemoryError: GetObjectField(data),原因没有查清。。。

由于,我懒的性子。。。于是就又google了下,发现原来还有另外一种方法:用jRegistry 来操作注册表,该方法我试过了,succeded!至少是完成了我让程序自启动的目的,至于别的方面的操作,继续学习ing :),另外:还有一种方法:使用JDK提供的Preferences类,该方法我没有试,因为它只能写入固定的注册表目录SOFTWARE/JavaSoft/prefs下。

以下是我google的资料,感谢原作者,由于我搞不清哪位是原作者出处(google了两份一样的 - - !),也就不能给出出处了,但非常感谢原作者,谢谢@~@。

=======================================原文============================================

由于java程序是“write once, run everywhere”,用java读写注册表,那程序的跨平台性就差了。java对注册表的操作,在jdk1.4以前的版本中,那是不可能的,只能用JNI来实现;然而jdk1.4之后提供的prefs包可以操作windows注册表,不过定死了root只在SOFTWARE/JavaSoft/prefs下,估计也是出于这种两难吧,又要保证所谓平台无关,还要照顾大家对windows的依赖。下面将从两方面来介绍对注册表的操作。


一、 使用JDK提供的Preferences类
首先得到Preferences的一个对象,这个对象就规定了你要在注册表的哪个位置写入信息,即节点.然后再用put(String key,String value)或者putInt(),tDouble()...等来给有关项赋值。下面是Demo程序。

执行上面的代码则在注册表的HKEY_LOCAL_MACHINE\Software\JavaSoft\prefs\javaplayer项下写入了有关值.
最后再说明几点:
1:你的节点的首字母不要大写,不然在注册表中的项前就加了一个“/”;
2:注册表中的值也可以导入到一个XML文件中,具体方法见有关文档.
3:如果把代码中的Preferences pre = Preferences.systemRoot().node("/javaplayer"); 换成Preferences pre = Preferences.userRoot().node("/javaplayer");则相应的 HKEY_LOCAL_MACHINE就成为HKEY_LOCAL_USER。


二、 用jRegistry 来操作注册表

下载地址http://sourceforge.net/project/showfiles.php?group_id=104321&package_id=113441&release_id=600795

下载后导入Eclipse工程lib库,然后拷贝jRegistryKey.dll到System32文件夹下。


jRegistry它是用JNI来封装WINDOWS注册表API,方便了java开发者访问windows注册表。首先介绍一下jRegistryKey.jar和jRegistryKey.dll,这两个文件是使用jRegistry来操作注册表所必需的文件:一个是jar包,是一个包括了java类的文件;一个是动态链接库文件,提供了访问注册表所需的本地代码(即C/C++)。

import ca.beq.util.win32.registry.*;

1、 创建一个新key:
Java代码
  1. RegistryKey r =newRegistryKey(RootKey.HKEY_CURRENT_USER,"Software\\BEQ Technologies");
  2. r.create();


2、创建一个子键:

Java代码
  1. RegistryKey r =newRegistryKey(RootKey.HKEY_CURRENT_USER,"Software");
  2. r.createSubkey("BEQ Technologies");


3、删除一个已存在的键值:
try {
RegistryKey r = new RegistryKey(RootKey.HKEY_CURRENT_USER, "Software\\BEQ Technologies");
r.delete();
} // try
catch(RegistryException re) {
re.printStackTrace();
} // catch


4、枚举子键:

Java代码
  1. RegistryKey r =newRegistryKey(RootKey.HKEY_CURRENT_USER,"Software");
  2. if(r.hasSubkeys()) {
  3. Iterator i = r.subkeys();
  4. while(i.hasNext()) {
  5. RegistryKey x = (RegistryKey)i.next();
  6. System.out.println(x.toString());
  7. }// while
  8. }// if


5、读注册表中键的值:

Java代码
  1. RegistryKey r =newRegistryKey(RootKey.HKEY_CURRENT_USER,"Software\\BEQ Technologies");
  2. if(r.hasValue("myValue")) {
  3. RegistryValue v = r.getValue("myValue");
  4. System.out.println(v.toString());//
  5. }// if


注:v.toString()仅是键myValue对应的键值,若要得到myValue键对应的值数据,则需要String str = v.getDate().toSting();


6、设置注册表中键的值:

Java代码
  1. RegistryKey r =newRegistryKey(RootKey.HKEY_CURRENT_USER,"Software\\BEQ Technologies");
  2. RegistryValue v =newRegistryValue("myVal", ValueType.REG_SZ,"data");
  3. r.setValue(v);


7、枚举某键的所有值:

Java代码
  1. RegistryKey r =newRegistryKey(RootKey.HKEY_CURRENT_USER,"Software");
  2. if(r.hasValues()) {
  3. Iterator i = r.values();
  4. while(i.hasNext()) {
  5. RegistryValue v = (RegistryValue)i.next();
  6. System.out.println(v.toString());
  7. }// while
  8. }// if


下面是一个demo程序,仅供参考。

Java代码
  1. // create a new key, "Test", under HKLM
  2. RegistryKey r =newRegistryKey(RootKey.HKEY_LOCAL_MACHINE,"Test");
  3. if(!r.exists()) {
  4. r.create();
  5. }// if
  6. // create value entries
  7. RegistryValue v =newRegistryValue("aString", ValueType.REG_SZ,"test");
  8. r.setValue(v);
  9. v.setName("aDword");
  10. v.setType(ValueType.REG_DWORD);
  11. v.setData(newInteger(0x1001001));
  12. r.setValue(v);
  13. // read value entries
  14. Iterator i = r.values();
  15. while(i.hasNext()) {
  16. v = (RegistryValue)i.next();
  17. System.out.println(v.toString());
  18. }// while
  19. // delete registry key
  20. r.delete();
分享到:
评论

相关推荐

    JAVA操作注册表的神器

    本篇文章将详细介绍如何利用Java来操作注册表,并介绍一个名为"JAVA操作注册表的神器"的工具。 首先,我们要知道,Java的标准库并不包含直接操作注册表的功能。为了在Java中操作注册表,我们需要借助一些第三方库,...

    Java操作注册表插件

    "Java操作注册表插件"就是这样的工具,它允许Java程序与Windows注册表进行交互。 在Java中,直接操作注册表并不像在C++或C#等语言中那样简单直接,因为Java的标准库并不包含对注册表的原生支持。为了实现这个功能,...

    java如何操作注册表源代码

    Java 操作注册表是开发者在特定场景下可能需要用到的功能,比如配置管理、系统设置等。在 Windows 操作系统中,注册表是存储系统和应用程序设置的关键数据库。通过 Java 来操作注册表,我们可以实现跨平台的程序在 ...

    Java操作windows注册表

    Java操作注册表时,通常会访问这些根键下的特定分支,如`HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs`或`HKEY_CURRENT_USER\Software\JavaSoft\Prefs`,用于存储与Java应用相关的配置信息。 #### 二、Java操作...

    JAVA操作注册表的示例,代码简单

    总的来说,通过Java操作注册表可以帮助我们处理特定的系统任务,但需要注意操作的安全性和适用性。在使用上述代码或方法时,一定要确保对注册表操作的合法性,并遵循最佳实践,以避免潜在的问题。

    Java操作注册表相关资料

    Java操作注册表的相关知识主要涉及Java的本地方法调用(JNI)或使用第三方库来访问Windows操作系统中的注册表。注册表是Windows系统中存储配置信息的重要数据库,它包含了硬件、软件、用户设置等各种数据。在Java中...

    最新java操作注册表的com.ice.jni.registry依赖压缩包

    Java操作注册表通常涉及到在Java程序中与Windows操作系统底层交互,以便读取、修改或创建注册表项。这里提到的`com.ice.jni.registry`是一个Java库,它提供了这样的功能,利用JNI(Java Native Interface)技术实现...

    java操作注册表简单示例

    在Java编程中,操作注册表是一项相对复杂的任务,因为Java本身并不直接支持对Windows注册表的访问。然而,我们可以通过一些第三方库或者JNA(Java Native Access)来实现这一功能。下面将详细介绍如何使用Java来操作...

    JRegistry-1.8java操作注册表最新资料(推荐).rar

    Java操作注册表是Java开发中一项实用但不常见的任务,主要涉及到系统级别的设置和管理。JRegistry库就是专为此目的设计的,版本1.8提供了对Windows注册表的简便访问和操作。在这个压缩包中,你将找到关于如何使用...

    JRegistry-1.7 java操作注册表2010最新版

    《JRegistry-1.7:Java操作注册表的利器》 在软件开发中,与操作系统进行交互是必不可少的一部分,尤其是在Windows环境下,注册表是存储系统配置信息的关键数据库。JRegistry是一个专门为Java开发者设计的库,它...

    Java 访问注册表所需要用到的架包regist.jar

    Java 访问注册表所需要用到的架包regist.jar

    JAVA操作注册表的JNI库和JAR包jRegistryKey

    总结来说,jRegistryKey是一个通过JNI连接Java和Windows注册表的库,提供了跨平台的Java代码操作注册表的功能。它的设计考虑了32位和64位系统的兼容性,简化了Java开发者在Windows环境下的系统级编程。正确使用这个...

    java读取注册表信息

    在这个场景中,我们需要关注的核心知识点是Java如何与Windows系统进行交互,特别是如何访问和操作注册表。 注册表是Windows操作系统中的一个重要数据库,存储了系统的配置信息,如软件设置、硬件设备信息等。Java...

    主要原理是Java通过修改注册表实现的,简单、安全、可靠。.

    Windows操作系统提供了操作注册表的API,因此用JNI将Java和这些API连接起来我们就获得了用Java操作注册表的能力。com.ice.jni.registry包是通过JNI(Java native interface)实现的Windows注册表操作API,可以用来访问...

    java下操作注册表方法优质资料.doc

    Java 操作注册表主要涉及到 `java.util.prefs` 包中的 `Preferences` 类,这是一个用于存储用户和系统首选项的接口。从 JDK 1.4 开始,Java 提供了这个包来支持跨平台的首选项存储,允许开发者在不依赖特定操作系统...

    java读取注册表工具.zip

    Java是一种广泛使用的编程语言,它通常不直接支持操作系统级别的功能,比如读取Windows注册表,因为这违背了Java跨平台的哲学。然而,通过Java的本地接口(JNI)或者使用Java的Runtime类来执行系统命令,可以实现...

    JAVA注册表垃圾清理

    同时,"另附jRegistryKey的操作API使用说明"表明该软件可能使用了名为jRegistryKey的库来操作注册表,这个库提供了Java API来访问和修改注册表项,对于学习Java与注册表交互的开发者来说,这部分资料尤为珍贵。...

    Java修改注册表

    "Java修改注册表"这个主题涉及到的是如何使用Java来操作Windows系统的注册表,这是一个相对复杂的任务,因为注册表是操作系统的核心组成部分,存储了系统配置、软件设置等关键信息。下面将详细介绍如何在Java中实现...

Global site tag (gtag.js) - Google Analytics