2013-01-08 134 views
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(); 
    } 
} 

上述方法,不打印任何東西,儘管甲骨文已經兒童:

Children of ORACLE

什麼我做錯了或誤解?

UPDATE:

我寫p = p.node("HKEY_LOCAL_MACHINE/SOFTWARE");

,而不是

p = p.node("HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE");

,當我打印的p的兒童我:ORACLE!這怎麼可能?那麼其他所有的孩子呢? (有..我通過註冊表編輯器看到它們)

看起來它存儲了上一次運行時附加在/SOFTWARE旁邊的先前值。

回答

0

我想你應該在這裏使用Preferences.systemRoot()而不是Preferences.userRoot()。後者映射到HKEY_CURRENT_USER。

在Windows中,路徑應該是HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,然後在HKEY_LOCAL_MACHINE\\SOFTWARE\\ORACLE之類的字符串中將其轉義。

注:我沒有試過這個我自己。

+0

我也試過了,但它仍然不起作用。 – Maroun

+0

你沒有添加一個斜槓? – Swapnil

+0

不,我鍵入:'p = p.node(「HKEY_LOCAL_MACHINE \\ SOFTWARE \\ ORACLE」);' – Maroun