http://xiaohuafyle.iteye.com/blog/1606538
出于跨平台的考虑,java在当初设计的时候,并没有考虑用java读取windows的注册表。但是其后,开发者经常遇到处理注册表的情况,所以java在后续的jdk中新增了一个折中的设计。即可以让那些实际需要处理注册表的开发者可以满足心愿,又避免开发者过度使用操作注册表的类库,而影响java的跨平台性。
Java的jdk提供的处理注册表的类,只能在HKEY_LOCAL_MACHINE.SOFTWARE.JavaSoft.Prefs对注册表做增删改查的操作.
例如:
Java代码
- // save regist flag to regedit
- Preferences pre = Preferences.systemRoot().node("/jedmp");
- pre.put("regist", "regist的信息");
- //read and print regist flag
- System.out.print(pref.get("regist","regist not found"));
实际开发者可能希望,java不要有这样的限制,而可以直接操作windows的所有注册表.java虽然没有直接满足我们的要求,但是第三方的jRegistryKey却可以帮助我们.
首先,从附件中将jRegistryKey.jar和jRegistryKey.dll下载下来.注意,jRegistryKey.dll文件要放在项目的根目录下.然后即可直接操作windows的全部注册表内容了.
例如:
Java代码
- // create a new key, "Test", under HKLM
- RegistryKey r = new RegistryKey(RootKey.HKEY_LOCAL_MACHINE, "Test");
- if(!r.exists()) {
- r.create();
- } // if
- // create value entries
- RegistryValue v = new RegistryValue("aString", ValueType.REG_SZ, "test");
- r.setValue(v);
- v.setName("aDword");
- v.setType(ValueType.REG_DWORD);
- v.setData(new Integer(0x1001001));
- r.setValue(v);
- // read value entries
- Iterator i = r.values();
- while(i.hasNext()) {
- v = (RegistryValue)i.next();
- System.out.println(v.toString());
- } // while
- // delete registry key
- r.delete();
对于java操作注册表更详细的说明,请见
http://www.iteye.com/topic/82291