访问Windows注册表

7

可能是重复问题:
使用Java读写Windows注册表

我需要从Java访问Windows注册表。此外,我需要复制一些注册表条目,并可能需要使用Java输入新的注册表变量。请有人帮帮我...

3个回答

5
我建议使用Java Native Access (JNA)库。它是JNI的一个很好的封装。根据这篇邮件列表帖子,他们已经为原生Windows注册表函数调用提供了贡献的封装。
如果您将JNA库添加到项目中,您需要的相关源代码是Registry.java类。从那里,只需在该类上调用方法以调查Windows注册表。
顺便说一句,在使用JNA时,请确保使用Platform.isXxx()来确保您的代码实际上可以查询特定平台上的注册表。

2
一个例子如下所示:
import com.ice.jni.registry.*;

public class DeleteEnvironmentVar{
public DeleteEnvironmentVar(String variable, String value) throws Exception {

        RegistryKey machine = Registry.getTopLevelKey("HKEY_LOCAL_MACHINE");
        RegistryKey environment = machine.openSubKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", RegistryKey.ACCESS_WRITE);
        try {
            if ( value == null ) { //Delete the variable in case value is empty
                environment.deleteValue(variable);
            }            
        }
        catch( NoSuchValueException nsve ) {}
        catch( NoSuchKeyException nske ) {}        
    }
}

1

Preferences 类是 Java 写入注册表的首选方式。然而,我实际上没有使用过它,所以我不知道它是否允许访问整个注册表还是只能访问特定于 JVM 或您的应用程序的部分。如果不行,那么听起来你需要查看其他人在此提出的 JNI 解决方案。如果可以工作,那么您就有了一种平台无关的方法来存储设置,以便在将来进行移植。


仅允许特定于您的应用程序的部分。 - boutta
1
Preferences 在 Windows 系统上使用注册表只是一种实现细节,Preferences 不是一个注册表 API。 - Alan Moore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接