通过Java中的Preferences访问HKEY_CURRENT_USER

时间:2015-03-31 12:42:28

标签: java registry preferences

我正在尝试在注册表中的以下路径中编写注册表项:

HKEY_CURRENT_USER - >软件 - > TestApp

我目前正在做:

    public static void main(String[] args)
{

    Preferences p = Preferences.userRoot().node("/HKEY_CURRENT_USER/Software/TestApp");
    p.put("TestKey", "TestValue");
}

但是它写在HKEY_CURRENT_USER - >软件 - > JavaSoft - > Prefs - > / H / K / E / Y_ / C / U / R / R / E / N / T / _ / U / S / E / R - >软件 - >测试/应用

如何让它遵循绝对路径,为什么要添加额外的斜杠?

2 个答案:

答案 0 :(得分:1)

您可以查看这篇关于Read/Write the registry

的精美博文

我可以提请你注意这段代码:

/**
   * Write a value in a given key/value name
   * @param hkey
   * @param key
   * @param valueName
   * @param value
   * @throws IllegalArgumentException
   * @throws IllegalAccessException
   * @throws InvocationTargetException
   */
  public static void writeStringValue
    (int hkey, String key, String valueName, String value)
    throws IllegalArgumentException, IllegalAccessException,
    InvocationTargetException
  {
    if (hkey == HKEY_LOCAL_MACHINE) {
      writeStringValue(systemRoot, hkey, key, valueName, value);
    }
    else if (hkey == HKEY_CURRENT_USER) {
      writeStringValue(userRoot, hkey, key, valueName, value);
    }
    else {
      throw new IllegalArgumentException("hkey=" + hkey);
    }
  }

我认为这个解决方案非常优雅,可以管理针对注册表的读/写操作。

答案 1 :(得分:0)

  

如何让它遵循绝对路径

您可以使用反射来访问java.util.prefs.Preferences类中的私有方法。有关详细信息,请参阅此答案:https://stackoverflow.com/a/6163701/6256127

但是,我不建议使用这种方法,因为它可能随时中断。

  

为什么要加入额外的斜杠?

看一下这个答案:https://stackoverflow.com/a/23632932/6256127

  

Registry-Keys是大小写保留的,但不区分大小写。例如,如果你有一把钥匙" Rbi"你不能再制作一个名为" RBi"的另一把钥匙。案件已保存但被忽略。 Sun的区分大小写的解决方案是在键上添加斜杠。