C'è un modo per usare java.util.Preferences in Windows senza che utilizzi il registro come backend?

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

Domanda

Voglio usare l'API java.util.Preferences ma non voglio che il mio programma tenti di leggere o scrivere nel registro di Windows. Come potrei procedere?

È stato utile?

Soluzione

Confido di aver letto leggere / scrivere nel registro di Windows usando Java e si desidera quindi avere un altro back-end rispetto al registro quando si utilizza l'API java.util.Preferences

Potresti estendere Preference API , come Bernhard o Croft ha fatto, come descritto in questo articolo :

  

Perché l'API delle preferenze è neutro dal back-end, non è necessario preoccuparsi se i dati sono archiviati in file, tabelle di database o una memoria specifica della piattaforma come il registro di Windows.

Esempi di estensioni tramite nuovo Preferenze può essere visto qui .

È meglio, IMO, che usare un'altra API.


Ad esempio, la ricerca di classi che si estendono java.util.prefs.AbstractPreferences :

  • È possibile utilizzare un archivio preferenze supportato da un file 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); }


  • Oppure puoi memorizzare queste preferenze in un 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;

  • Oppure puoi usare un semplice file di proprietà:

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 {

Altri suggerimenti

È sempre possibile estendere java.util.prefs.AbstractPreferences.

Un'alternativa potrebbe essere l'uso del pacchetto di configurazione di Apache Commons che consente di leggere e scrivere dati di configurazione da / a fonti diverse.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top