我想实现从默认(Windows HKCU)到我自己(文件系统)的首选项迁移。一切都在分开但不能一起工作:
public static void main(String[] args){
try {
for(String s : Preferences.systemNodeForPackage(MyPreferences.class).node(myNode).keys()){
sysHashMap.put(s, Preferences.systemNodeForPackage(MyPreferences.class).node(myNode).get(s, null));
logger.info("moving key " + s + " from system");
}
} catch (BackingStoreException ex) {
java.util.logging.Logger.getLogger(PreferenceManager.class.getName()).log(Level.SEVERE, null, ex);
}
//then I want to switch to my own implemented preferences
System.setProperty("java.util.prefs.PreferencesFactory", FilePreferencesFactory.class.getName());
//here if I print System.getProperty - I see that property is set to what I want
AppPreferences myNewPreferences = new Preferences();
myNewPreferences.addEntry("key1", "value1");//sets the value to the registry - i.e. old implementation
}
}
如果我输出“for”循环 - 一切都按预期工作,键值将写入FilePreferencesFactory中指定的文件。 为什么我无法切换首选项实施即时? 可能吗?我该如何修复我的代码?提前致谢。任何问题都将得到解答。
答案 0 :(得分:1)
一个老问题,但对于任何有兴趣的人:
您的自定义首选项工厂仅在您调用java.util.prefs.PreferencesFactory
或systemRoot()
之前设置系统属性userRoot()
时使用(或者,在您的情况下通过systemNodeForPackage()
间接执行它们) 。
否则,要使用的工厂类已设置为默认值,并且只能设置一次。
(请参阅java.util.prefs.Preferences
类中工厂的初始化代码)。