1

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

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.

4

1 回答 1

0

我认为你应该使用Preferences.systemRoot()而不是Preferences.userRoot()这里。后者映射到 HKEY_CURRENT_USER。

对于 Windows,路径应该是HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,然后你在 String 中转义它,如HKEY_LOCAL_MACHINE\\SOFTWARE\\ORACLE.

注意:我自己没有尝试过。

于 2013-01-08T10:40:57.193 回答