Quiero usar la API java.util.Preferences, pero no quiero que mi programa intente leer o escribir en el registro de Windows. ¿Cómo voy a hacer esto?¿Hay alguna manera de usar java.util.Preferences en Windows sin usar el Registro como servidor?
Respuesta
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 {
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.
- 1. ¿Hay alguna manera de usar la Autenticación de Windows (Directorio Activo) para un servidor Git?
- 2. ¿Hay alguna manera de ejecutar el sonar en proyectos sin usar el repositorio?
- 3. ¿Hay alguna manera de usar variables locales en los módulos?
- 4. ¿Hay alguna manera de usar DRM en video HTML5?
- 5. ¿hay alguna manera de usar tr /// (o equivalente) en java?
- 6. ¿Hay alguna manera de iniciar/reiniciar/detener el servidor Apache en Linux como usuario no root?
- 7. ¿Hay alguna manera de usar orderby en un forloop C#?
- 8. ¿Hay alguna manera de usar Canvas en IE7 o IE8?
- 9. ¿Hay alguna manera de usar Thickbox con contenido dinámico?
- 10. ¿Hay alguna manera de usar ConcurrentDictionary.TryUpdate con una expresión lambda?
- 11. C#: ¿Hay alguna forma de usar expresiones como variable/parámetro?
- 12. ¿Hay alguna manera de usar el texto de uso como fondo con CSS?
- 13. ¿Hay alguna manera de pegar los elementos de un vector en R sin usar un bucle?
- 14. ¿Hay alguna manera de usar JSONP con un servidor REST Delphi DataSnap?
- 15. ¿Hay alguna manera de seguir un atajo del sistema de archivos de Windows programáticamente en C# sin usar COM?
- 16. ¿Hay alguna manera de usar coincidencias sin sangría en JavaScript para expresiones regulares?
- 17. Scala: ¿Hay alguna manera de usar PriorityQueue como lo haría en Java?
- 18. ¿Hay alguna manera de usar encabezados precompilados en VC++ sin requerir stdafx.h?
- 19. ¿Hay alguna manera de usar la palabra "tipo" como nombre de variable en Scala?
- 20. ¿Hay alguna manera de usar Jenkins con Github Pull Requests?
- 21. ¿Hay alguna manera de usar facetas con la gema pg_search
- 22. ¿Hay alguna manera de cambiar las Vistas en iOS sin usar UINavigationController?
- 23. ¿Hay alguna manera de usar GET y POST juntos?
- 24. ¿Hay alguna manera de usar algo como Console.write para depurar en código XNA?
- 25. En Ruby, ¿hay alguna manera de usar algo como hash.each_with_index do | [k, v], i |?
- 26. ¿Existe alguna manera fácil de usar InternalsVisibleToAttribute?
- 27. ¿hay alguna manera de usar C++ 0x en xcode? Quiero usar gcc 4.4 o superior
- 28. bugbest adb: ¿Hay alguna manera de restablecer el registro?
- 29. Al usar querySelectorAll, ¿hay alguna manera de hacer referencia a los secundarios inmediatos del nodo contextual, sin usar IDs?
- 30. ¿Hay alguna manera de detener el tiempo. ¿Duerme en Windows?
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
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