我正在尝试在注册表中的以下路径中编写注册表项:
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 - >软件 - >测试/应用
如何让它遵循绝对路径,为什么要添加额外的斜杠?
答案 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的区分大小写的解决方案是在键上添加斜杠。