Existe-t-il un moyen d'utiliser java.util.Preferences sous Windows sans utiliser le registre en tant que serveur?

StackOverflow https://stackoverflow.com/questions/208231

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?

Était-ce utile?

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;
  • Ou vous pouvez utiliser un simple fichier de propriétés:

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top