2017-02-11 70 views
0
 for (String path : regPath) { 
        if (WinRegistry.readStringSubKeys(WinRegistry.HKEY_CURRENT_USER, path) == null) { 
         System.out.println(path + " was null."); 
         continue; 
        } 

        List<String> ls = WinRegistry.readStringSubKeys(WinRegistry.HKEY_CURRENT_USER, path); 
        if (ls == null || ls.isEmpty()) { 
         return; 
        } else { 
         for (String sub : ls) { 
          sub = path + "\\" + sub; 
          System.out.println(sub); 
          if (WinRegistry.readStringSubKeys(WinRegistry.HKEY_CURRENT_USER, sub) == null) { 
           System.out.println(path + " was null."); 
           continue; 
          } 
          ls = WinRegistry.readStringSubKeys(WinRegistry.HKEY_CURRENT_USER, sub); 
          if (ls == null || ls.isEmpty()) { 
           return; 
          } else { 
           for (String subKey : ls) { 
            subKey = sub + subKey; 
            System.out.println(subKey); 
           } 
          } 

          System.out.println(sub); 
         } 
        } 
       } 

從我的答案之一,我想出了這個!我怎樣才能讓它通過給定路徑的所有鍵?刪除註冊表項返回空 - 不知道爲什麼

我需要從最後一個活動觀衆清除所有信息,here它給你,我需要刪除註冊表值。

回答

0

去除註冊表項的API是WinRegistry.deleteKey(int hkey, String key)。 但是如果子密鑰存在,它會拋出java.lang.IllegalArgumentException: rc=5 key=???

對於刪除註冊表鍵遞歸,你應該實現這樣的方法:

private static void deleteKeyAndSub(int hkey, String key) 
    throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { 
    List<String> ls = WinRegistry.readStringSubKeys(hkey, key); 
    if(ls == null) { 
    return; 
    } else if(ls.isEmpty()) { 
    WinRegistry.deleteKey(hkey, key); 
    } else { 
    for (String subkey : ls) { 
     subkey = key+"\\"+subkey; 
     //System.out.println("delete subkey - "+subkey); 
     deleteKeyAndSub(hkey, subkey); 
    } 
    WinRegistry.deleteKey(hkey, key); 
    } 
} 
+0

我怎麼會編輯這個以便它會繼續進入每一個鍵,並列出某個路徑/項下的所有文件? – Exuro

+0

對我來說,我更喜歡第三個參數'列表 foundKeys',向列表中添加子鍵並在'for(String subkey:list){...}'中調用self。 –

+0

好的謝謝。 – Exuro