使用java操作windows注册表,有两种方式:
-
使用java自带的Preferences类。
- 优点:在使用了网上找的大神写的操作类,就可以轻松的对注册表进行增删改查!
- 缺点:操作注册表范围有限;(但使用了大神写的操作类,就可以解决这个问题了。)
Preferences.userRoot()的操作路径在
[HKEY_CURRENT_USER\Software\JavaSoft\Prefs]
Preferences.systemRoot()的操作路径在
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs]
-
使用jni的jRegistryKey.jar。
- 优点:操作灵活,可获取任意路径的key,value
- 缺点:目前只支持32位系统,64位系统无法使用!
Demo:
1、Preferences的demo(增删改查):
import java.util.prefs.Preferences;
public class PreferencesOperationExample {
public static void main(String[] args) {
// 获取用户偏好节点
Preferences userPrefs = Preferences.userRoot().node("myAppPreferences");
// 增加偏好设置
addPreference(userPrefs);
// 查询偏好设置
queryPreference(userPrefs);
// 修改偏好设置
modifyPreference(userPrefs);
// 查询修改后的偏好设置
queryPreference(userPrefs);
// 删除偏好设置
deletePreference(userPrefs);
// 查询已删除的偏好设置(应返回默认值)
queryPreference(userPrefs);
}
public static void addPreference(Preferences prefs) {
// 存储用户名
prefs.put("username", "John");
// 存储用户年龄
prefs.putInt("age", 30);
// 存储用户是否已婚
prefs.putBoolean("isMarried", false);
}
public static void queryPreference(Preferences prefs) {
// 获取用户名
String username = prefs.get("username", "Not Found");
// 获取用户年龄
int age = prefs.getInt("age", -1);
// 获取用户婚姻状态
boolean isMarried = prefs.getBoolean("isMarried", true);
System.out.println("Username: " + username);
System.out.println("Age: " + age);
System.out.println("Is Married: " + isMarried);
}
public static void modifyPreference(Preferences prefs) {
// 修改用户名
prefs.put("username", "Jane");
// 修改用户年龄
prefs.putInt("age", 25);
// 修改用户婚姻状态
prefs.putBoolean("isMarried", true);
}
public static void deletePreference(Preferences prefs) {
prefs.remove("username");
prefs.remove("age");
prefs.remove("isMarried");
}
}
2、jRegistryKey.jar的demo(增删改查)
import de.schlichtherle.registry.RegistryKey;
import de.schlichtherle.registry.RegistryValueNotFoundException;
public class RegistryOperationExample {
public static void main(String[] args) {
// 操作 HKEY_CURRENT_USER 下的指定路径
String registryPath = "Software\\MyApp";
try {
RegistryKey key = RegistryKey.getRootKey().openSubKey(RegistryKey.HKEY_CURRENT_USER, registryPath);
// 增加一个值
addValue(key);
// 查询值
queryValue(key);
// 修改值
modifyValue(key);
// 查询修改后的值
queryValue(key);
// 删除值
deleteValue(key);
// 查询已删除的值(应抛出异常)
queryValue(key);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void addValue(RegistryKey key) throws Exception {
key.setValue("UserName", "John");
key.setValue("UserAge", 30);
}
public static void queryValue(RegistryKey key) throws RegistryValueNotFoundException {
String userName = (String) key.getValue("UserName");
int userAge = (int) key.getValue("UserAge");
System.out.println("UserName: " + userName);
System.out.println("UserAge: " + userAge);
}
public static void modifyValue(RegistryKey key) throws Exception {
key.setValue("UserName", "Jane");
key.setValue("UserAge", 25);
}
public static void deleteValue(RegistryKey key) throws Exception {
key.deleteValue("UserName");
key.deleteValue("UserAge");
}
}