Windows 7中存储的Java首选项在哪里?

jav*_*y79 48 java preferences windows-7

我们在一些应用程序中使用Java首选项,并没有真正注意到这一点,因为调用的实用程序相当陈旧并且是在Windows XP中编写的.但似乎Java首选项不再存储在Windows 7的注册表中 - 或者它们存储在不同的地方.

我期待它在:

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs

但我不认为那里.

更糟糕的是,当我运行这个应用程序时:

public static void main( final String[] args ) throws BackingStoreException {

    Preferences systemRoot = Preferences.systemRoot();
    Preferences preferences = systemRoot.node( "com/mycompany/settings" );

    systemRoot.put( "foo", "bar" );
    systemRoot.put( "baz", "lolz" );
    System.out.println( "-------------------------------" );

    String[] keys = preferences.keys();
    for( String key : keys ) {
        System.out.println( key );
    }

    System.out.println( "-------------------------------" );

    keys = systemRoot.keys();
    for( String key : keys ) {
        System.out.println( key );
    }
}
Run Code Online (Sandbox Code Playgroud)

它实际写(我可以评论推出并再次运行它,它的工作原理)但我没有在注册表中看到新的密钥.

此外,我似乎无法在任何地方看到这一点.提前致谢.

编辑#1重要的唯一原因是设置的变化取决于它运行的环境.这就是说,通过手动插入注册表项然后进行一些检查来模拟该环境通常很有用.

我是以管理员身份运行的,但我没有在注册表中看到我期望它们的密钥.

Ale*_*exR 55

他们是当前用户: HKEY_CURRENT_USER\Software\JavaSoft\Prefs

  • 用户设置在HKCU下,HCKS下的系统设置(除非用系统变量覆盖它).然而,64位Windows和32位java的路径在WoW64下如上所述. (2认同)

bes*_*sss 25

for systemRoot:HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft ...

for userRoot:HKEY_CURRENT_USER\SOFTWARE\JavaSoft ...


小智 15

当我使用systemRoot首选项时,我遇到了类似的问题,并且在注册表监视器的帮助下,我发现它们存储的位置会根据Windows操作系统是32位还是64位而有所不同.

在32位操作系统(在我的情况下是Windows XP)下,systemRoot注册表路径是

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs

在64位操作系统(在我的情况下是Windows 7)下,systemRoot注册表路径是

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs

两个系统都使用相同的32位JRE(JRE 1.6.0_20-b02).

在64位Windows上运行32位应用程序(JVM)时,注册表会自动插入Wow6432Node路径元素,以允许编译为32位或64位的应用程序在同一台计算机上共存,同时保持其设置分开.