Я хочу использовать API java.util.Preferences, но я не хочу, чтобы моя программа пыталась прочитать или записать в реестр Windows. Как я могу это сделать?Есть ли способ использовать java.util.Preferences в Windows без него, используя реестр в качестве бэкэнд?
ответ
Я надеюсь, что вы прочитали read/write to Windows Registry using Java и затем вы хотите иметь другой фоновый, чем реестр при использовании java.util.Preferences
API
Вы можете расширить Preference
API, как Bernhard или Croft сделали, как описаны в this article:
Поскольку Preferences API является фоновым нейтральным, вам не нужно заботиться ли данные хранятся в файлах, таблицах базы данных, или для конкретной платформы хранения, таких как реестр Windows.
Примеры расширений через new Preferences
can be seen here.
Это лучше, ИМО, чем использовать другой 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 {
Всегда можно расширить java.util.prefs.AbstractPreferences.
Альтернативой может быть использование. Configuration package Apache Commons позволяет вам считывать и записывать данные конфигурации из/в разные источники.
Хорошо, спасибо. Обратите внимание, что вы можете использовать PreferencesFactory для использования с системным свойством Java «java.util.prefs.PreferencesFactory». http://www.onjava.com/pub/a/onjava/synd/2001/10/17/j2se.html?page=2 – Epaga 2008-10-16 13:14:51