2008-10-16 16 views

Respuesta

11

Deseo que hayan leído el read/write to Windows Registry using Java y, a continuación, desea tener otra back-end que el registro cuando se utiliza el java.util.Preferences API

Se podría extender el Preference API, como Bernhard o Croft hizo, como se describe en this article:

Debido a que el Preferences API es de fondo neutro, no es necesario que se preocupa de si los datos se almacenan en archivos de bases de datos, tablas, o un dispositivo de almacenamiento específico de la plataforma, tales como el registro de Windows.

Ejemplos de extensiones a través de new Preferences can be seen here.

Eso es mejor, IMO, que utilizar otra API.


Por ejemplo, la búsqueda de clases se extiende java.util.prefs.AbstractPreferences:

  • Se puede utilizar un almacén de preferencias respaldado por un archivo 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); 
    } 

  • O puede almacenar esas preferencias en 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; 

  • O puede utilizar un simple archivo de propiedades:

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 { 
+0

Buena calidad, gracias. Tenga en cuenta que puede ver PreferencesFactory para ser utilizado con la propiedad del sistema Java "java.util.prefs.PreferencesFactory". http://www.onjava.com/pub/a/onjava/synd/2001/10/17/j2se.html?page=2 – Epaga

+0

Genial, Mientras tanto, también encontré un buen archivo de propiedad de dominio público basado en uno aquí : http://www.davidc.net/programming/java/java-preferences-using-file-backing-store Terminé usando esto porque Mavericks parece haber introducido cierta rareza en la implementación predeterminada.Encontré el archivo predeterminado de la tienda de respaldo en $ HOME/Library/Preferences/com.apple.java.util.prefs.plist y, aunque binario, todavía podía cagarlo. Observé datos escritos por mi programa y luego los observé desaparecer del archivo sin interacción adicional. La tienda predeterminada parece estar rota en OSX Mavericks. – Gus

2

Siempre es posible extender java.util.prefs.AbstractPreferences.

Una alternativa podría ser utilizar El Configuration package de Apache Commons le permite leer y escribir datos de configuración de/a diferentes fuentes.

Cuestiones relacionadas