我想打印首选节点的子节点。我写了以下代码:
private void printOracleDefaults() {
Preferences p = Preferences.userRoot();
p = p.node("/HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE");
try {
for(String s : p.childrenNames())
System.out.println(s);
} catch (BackingStoreException e) {
//bla bla..
e.printStackTrace();
}
}
虽然ORACLE有孩子,但上面的方法不会打印任何内容:
我做错了什么或误解了?
更新
我写了p = p.node("HKEY_LOCAL_MACHINE/SOFTWARE");
而不是
p = p.node("HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE");
当我打印p
的孩子时,我得到了:ORACLE
!这怎么可能?那么其他所有孩子呢? (有......我通过注册表编辑器看到了它们)
看起来它存储了/SOFTWARE
旁边附加的先前运行中的先前值。
答案 0 :(得分:0)
我认为你应该在这里使用Preferences.systemRoot()
代替Preferences.userRoot()
。后者映射到HKEY_CURRENT_USER。
对于Windows,路径应为HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
,然后在HKEY_LOCAL_MACHINE\\SOFTWARE\\ORACLE
之类的字符串中将其转义。
注意:我自己没试过。