我想使用 java.util.Preferences API,但我不希望我的程序尝试读取或写入 Windows 注册表。我该怎么办?
11609 次
2 回答
17
我相信您已经使用 Java 读取/写入 Windows 注册表java.util.Preferences,然后您希望在使用API时拥有另一个后端而不是注册表
您可以像Bernhard或Croft那样扩展PreferenceAPI ,如本文所述:
因为Preferences API是后端中立的,所以您不必关心数据是存储在文件、数据库表还是特定于平台的存储(如 Windows 注册表)中。
可以在这里看到通过newPreferences进行扩展的示例。
IMO,这比使用另一个 API 更好。
例如,搜索扩展类java.util.prefs.AbstractPreferences:
- 您可以使用由 XML 文件支持的首选项存储:
de.unika.ipd.grgen.util.MyPreferences
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.prefs.AbstractPreferences;
import java.util.prefs.BackingStoreException;
/**
* Own implementation of the Java preferences API, that does not use
* a "OS backing store" but relies on importing and exporting the
* preferences via xml files.
* Also, If a preference is got, but was not in the tree, it is entered.
*/
public class MyPreferences extends AbstractPreferences {
private Map<String, String> prefs = new HashMap<String, String>();
private Map<String, AbstractPreferences> children = new HashMap<String, AbstractPreferences>();
public MyPreferences(MyPreferences parent, String name) {
super(parent, name);
}
/**
* @see java.util.prefs.AbstractPreferences#putSpi(java.lang.String, java.lang.String)
*/
protected void putSpi(String key, String value) {
prefs.put(key, value);
}
- 或者您可以将这些首选项存储在 LDAP 中:
de.tarent.ldap.prefs.LDAPSystemPreferences
import java.util.prefs.AbstractPreferences;
import java.util.prefs.BackingStoreException;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import de.tarent.ldap.LDAPException;
import de.tarent.ldap.LDAPManager;
/**
* @author kirchner
*
* Preferences im LDAP
*/
public class LDAPSystemPreferences extends AbstractPreferences {
LDAPManager ldm = null;
Properties properties = new Properties();
//Map für key/value der Preferences
Map cache = new HashMap();
//Map für timestamp der Preferences
Map timestamp = new HashMap();
private Boolean deleted = Boolean.FALSE;
- 或者您可以使用一个简单的属性文件:
com.adito.boot.PropertyPreferences:
import java.util.prefs.AbstractPreferences;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* A simple implementation for the preferences API. That stores preferences
* in propery files. We do not have to worry about sharing the preferencese
* with other JVM instance so there is no need for any kind of synchronising
* or locking.
*/
public class PropertyPreferences extends AbstractPreferences {
于 2008-10-16T12:11:56.257 回答
4
总是可以扩展 java.util.prefs.AbstractPreferences。
另一种方法是使用 Apache Commons 的配置包,允许您从/向不同来源读取和写入配置数据。
于 2008-10-16T12:04:58.703 回答