Java 打印首选项节点的子节点

Java 打印首选项节点的子节点,java,oracle,registry,Java,Oracle,Registry,我想打印首选项节点的子节点。我编写了以下代码: 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); }

我想打印首选项节点的子节点。我编写了以下代码:

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_本地_机器/软件”)

而不是

p=p.node(“HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE”)

当我打印
p
的孩子们时,我得到了:
ORACLE
!怎么可能呢?其他孩子呢?(有..我通过注册表编辑器看到了)


看起来它存储的是以前运行中附加在
/SOFTWARE

旁边的值。我认为您应该在此处使用
首选项.systemRoot()
而不是
首选项.userRoot()
。后者映射到HKEY_当前用户

对于Windows,路径应该是
HKEY\U LOCAL\U MACHINE\SOFTWARE\ORACLE
,然后在字符串中转义它,如
HKEY\U LOCAL\U MACHINE\\SOFTWARE\\ORACLE


注意:我自己没有试过。

没有,我键入了:
p=p.node(“HKEY\U LOCAL\U MACHINE\\SOFTWARE\\ORACLE”)
我在考虑是否应该在这里使用
Preferences.systemRoot()
而不是
Preferences.userRoot()
。后者映射到HKEY_CURRENT_USERI我现在还不清楚,因为我没有访问windows机器进行进一步的测试/调试