Java 删除注册表项返回null-不确定原因 for(字符串路径:regPath){ if(WinRegistry.readStringSubKeys(WinRegistry.HKEY_当前用户,路径)==null){ System.out.println(路径+“为空”); 继续; } 列表ls=WinRegistry.readStringSubKeys(WinRegistry.HKEY\u当前用户,路径); if(ls==null | | ls.isEmpty()){ 返回; }否则{ 用于(字符串子项:ls){ sub=路径+“\\”+sub; 系统输出打印项次(sub); if(WinRegistry.readStringSubKeys(WinRegistry.HKEY_当前用户,sub)==null){ System.out.println(路径+“为空”); 继续; } ls=WinRegistry.readStringSubKeys(WinRegistry.HKEY\u当前用户,sub); if(ls==null | | ls.isEmpty()){ 返回; }否则{ for(字符串子键:ls){ 子键=子键+子键; System.out.println(子键); } } 系统输出打印项次(sub); } } }

Java 删除注册表项返回null-不确定原因 for(字符串路径:regPath){ if(WinRegistry.readStringSubKeys(WinRegistry.HKEY_当前用户,路径)==null){ System.out.println(路径+“为空”); 继续; } 列表ls=WinRegistry.readStringSubKeys(WinRegistry.HKEY\u当前用户,路径); if(ls==null | | ls.isEmpty()){ 返回; }否则{ 用于(字符串子项:ls){ sub=路径+“\\”+sub; 系统输出打印项次(sub); if(WinRegistry.readStringSubKeys(WinRegistry.HKEY_当前用户,sub)==null){ System.out.println(路径+“为空”); 继续; } ls=WinRegistry.readStringSubKeys(WinRegistry.HKEY\u当前用户,sub); if(ls==null | | ls.isEmpty()){ 返回; }否则{ for(字符串子键:ls){ 子键=子键+子键; System.out.println(子键); } } 系统输出打印项次(sub); } } },java,registry,Java,Registry,从其中一个答案中我想到了这个!我如何使它通过给定路径的所有键 我需要清除上一个activity viewer中的所有信息,它会为您提供我需要删除的注册表值。删除注册表项的API是WinRegistry.deleteKey(int-hkey,String-key)。 但如果存在子键,它会抛出java.lang.IllegalArgumentException:rc=5 key=??? 对于递归删除注册表项,应实现如下方法: for (String path : regPath) {

从其中一个答案中我想到了这个!我如何使它通过给定路径的所有键


我需要清除上一个activity viewer中的所有信息,它会为您提供我需要删除的注册表值。

删除注册表项的API是
WinRegistry.deleteKey(int-hkey,String-key)
。 但如果存在子键,它会抛出
java.lang.IllegalArgumentException:rc=5 key=???

对于递归删除注册表项,应实现如下方法:

     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);
                        }
                    }
                }
private static void deleteKeyAndSub(int-hkey,字符串键)
抛出IllegalArgumentException、IllegalAccessException、InvocationTargetException{
List ls=WinRegistry.readStringSubKeys(hkey,key);
如果(ls==null){
返回;
}else if(ls.isEmpty()){
删除注册表项(hkey,注册表项);
}否则{
for(字符串子键:ls){
子键=键+“\\”+子键;
//System.out.println(“删除子项-”+子项);
deleteKeyAndSub(hkey,subkey);
}
删除注册表项(hkey,注册表项);
}
}

我该如何编辑它,以便它继续进入每个键并列出某个路径/键下的所有文件?对我来说,我更喜欢使用第三个参数
列出foundKeys
,将子键添加到列表中,并调用self-in
For(String subkey:list){…}
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);
  }
}