Existe-t-il un moyen d'utiliser java.util.Preferences sous Windows sans utiliser le registre en tant que serveur?
-
03-07-2019 - |
Question
Je souhaite utiliser l'API java.util.Preferences mais je ne souhaite pas que mon programme tente de lire ou d'écrire dans le registre Windows. Comment pourrais-je m'y prendre?
La solution
J'espère que vous avez lu le lecture / écriture dans le registre Windows à l'aide de Java et que vous souhaitiez alors utiliser un autre back-end que le registre lorsque vous utilisez l'API java.util.Preferences
Vous pouvez étendre l'API Préférences
, comme ce qui suit: Bernhard ou Croft l'a fait, comme décrit dans cet article :
En raison de la API de préférences est neutre en arrière-plan, vous ne devez pas vous préoccuper de savoir si les données sont stockées dans des fichiers, des tables de base de données ou un stockage spécifique à la plate-forme tel que le registre Windows.
Exemples d'extensions via Le nouveau Préférences
est visible ici .
C’est mieux, IMO, que d’utiliser une autre API.
Par exemple, recherche de classes étendues java.util.prefs.AbstractPreferences
:
- Vous pouvez utiliser un magasin de préférences sauvegardé par un fichier XML:
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);
}
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 {
Autres conseils
Il est toujours possible d'étendre java.util.prefs.AbstractPreferences.
Une alternative pourrait consister à utiliser Le Le package de configuration d'Apache Commons vous permet de lire et d'écrire. données de configuration de / vers différentes sources.