Estoy usando java.util.prefs.Preferences para las preferencias de la aplicación. Y necesito la capacidad de editar esas preferencias manualmente. ¿Es posible almacenarlo en archivos en lugar de en el Registro de Windows? O debería usar otro mecanismo en lugar de java.util.prefs.Preferences?cómo almacenar java.util.prefs.Preferences en el archivo?
Respuesta
Si desea seguir utilizando la API de preferencias, pero escribir en un archivo, se necesita una nueva PreferencesFactory, como se detalla en this SO post.
Se explica en otro post, here
Properties prop = new Properties();
InputStream in = getClass().getResourceAsStream("foo.properties");
prop.load(in);
in.close()
lo siento - No es lo mismo. [Comparación de la API de preferencias con otros mecanismos] (http://docs.oracle.com/javase/1.5.0/docs/guide/preferences/index.html#prefs-other). En Windows hay son dos lugares donde se pueden colocar las preferencias. Registro o% APPDATA%. Fe en QSettings (Qt Framework) Podría seleccionar entre esas 2 opciones ... – denys
Lo siento, he entendido mal. ¿Qué pasa con eso? No pude probar pero parece wh a quien estás buscando http://www.davidc.net/programming/java/java-preferences-using-file-backing-store –
Mucho mejor. Gracias, @MEK. – denys
usted va a querer utilizar el método de dos siguientes:
Preferences.exportSubtree(OutputStream os)
y
Preferences.importPreferences(InputStream is)
Creo que se puede utilizar archivos de propiedades en su lugar. Se almacenan en el sistema de archivos. Puede definir la ruta que desea. Y puedes editarlo a mano. Ver this question para más detalles.
Este código debe ayudarle a [http://java.sun.com/developer/technicalArticles/releases/preferences/]:
public class PrefSave {
private static final String PACKAGE = "/pl/test";
public static void main(String[] args) {
doThings(Preferences.systemRoot().node(PACKAGE));
doThings(Preferences.userRoot().node(PACKAGE));
}
public static void doThings(Preferences prefs) {
prefs.putBoolean("Key0", false);
prefs.put("Key1", "Value1");
prefs.putInt("Key2", 2);
Preferences grandparentPrefs = prefs.parent().parent();
grandparentPrefs.putDouble("ParentKey0", Math.E);
grandparentPrefs.putFloat("ParentKey1", (float) Math.PI);
grandparentPrefs.putLong("ParentKey2", Long.MAX_VALUE);
String fileNamePrefix = "System";
if (prefs.isUserNode()) {
fileNamePrefix = "User";
}
try {
OutputStream osTree = new BufferedOutputStream(
new FileOutputStream(fileNamePrefix + "Tree.xml"));
grandparentPrefs.exportSubtree(osTree);
osTree.close();
OutputStream osNode = new BufferedOutputStream(
new FileOutputStream(fileNamePrefix + "Node.xml"));
grandparentPrefs.exportNode(osNode);
osNode.close();
} catch (IOException ioEx) {
// ignore
} catch (BackingStoreException bsEx) {
// ignore too
}
}
Hace un tiempo tuve que subir con una implementación de la Clase de preferencias que leería configuraciones de, pero no escribiría en el registro. Obtuve una clase ReadOnlyPreferences de AbstractPreferences para lograr esto. Más tarde, necesité esta misma funcionalidad exacta que necesita para ir a/desde archivos. Acabo de extender mi clase ReadOnlyPreferences para anular Sync() y flush() para mantener el archivo sincronizado. La mejor parte de esto sería utilizar la misma lógica para aplicar valores predeterminados a los valores, al igual que el uso habitual de las preferencias, ya que en realidad no existía nada en el registro para leer. Mantuve el archivo sincronizado usando exportSubtree() e importPreferences() de la clase base para hacer todo el trabajo pesado por mí.
Lo siento, no puedo publicar el código ya que no lo tengo, pero utilicé las preferencias cifradas que puede encontrar en el siguiente enlace como punto de inicio. Eso es lo que hice y me tomó alrededor de una hora destilarlo a justo lo que necesitaba, lo que principalmente era arrojar código, ¡que es mucho más fácil que escribir código! También se publica en el Dr. Dobbs en el siguiente enlace si no desea hacer clic en el primero. Nunca vi un lugar fácil en el artículo dobbs para descargar toda la fuente. De todos modos, el artículo es el mejor que he visto para ampliar las preferencias.
http://www.panix.com/~mito/articles/#ep
http://www.drdobbs.com/security/encrypted-preferences-in-java/184416587?pgno=4
Prueba la siguiente clase, que le permite utilizar algunas simples put()
y get()
funciones usando un archivo local configuration.xml
.
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;
public class SimpleProperties
{
private String propertiesFilePath;
private Properties properties;
public SimpleProperties() throws InvalidPropertiesFormatException, IOException
{
propertiesFilePath = "configuration.xml";
properties = new Properties();
try
{
properties.loadFromXML(new FileInputStream(propertiesFilePath));
} catch (InvalidPropertiesFormatException e)
{
}
}
public void put(String key, String value) throws FileNotFoundException, IOException
{
properties.setProperty(key, value);
store();
}
public String get(String key)
{
return properties.getProperty(key);
}
private void store() throws FileNotFoundException, IOException
{
String commentText = "Program parameters";
properties.storeToXML(new FileOutputStream(propertiesFilePath), commentText);
}
}
- 1. Java: almacenar variables en el archivo
- 2. CarrierWave cómo almacenar el archivo en una url determinada
- 3. Cómo almacenar datos dentro del archivo ejecutable
- 4. Almacenar un archivo en el portapapeles en python
- 5. Almacenar contenido web en un archivo JAR
- 6. cómo almacenar punteros en el mapa
- 7. No se puede obtener el nombre de archivo remoto en file_get_contents() y luego almacenar el archivo
- 8. Cómo almacenar los registros en un archivo txt usando android.util.log
- 9. Cómo almacenar barra de navegación en un archivo?
- 10. ¿El archivo app.config es un lugar seguro para almacenar contraseñas?
- 11. Cómo almacenar el resultado de diff en Linux
- 12. C/C++: Cómo almacenar datos en un archivo en el árbol B
- 13. ¿Cómo almacenar el nombre de host en una variable en un archivo .bat?
- 14. Cómo almacenar la contraseña como encriptada en el archivo de propiedades en Spring
- 15. C# 'configuración de la aplicación archivo "app.config" ... ¿cómo almacenar colecciones?
- 16. ¿Cómo puedo almacenar un archivo descargado con Java y Jersey?
- 17. Cómo almacenar en caché con el sitio Node.js de manifiesto
- 18. Almacenar imagen en plist
- 19. Cómo almacenar una matriz de bytes como un archivo de imagen en el disco?
- 20. Android: ¿Cómo almacenar la URL en el archivo de recursos string.xml?
- 21. ¿Cómo puedo almacenar el resultado de una consulta SQL en un archivo CSV usando Squirrel?
- 22. ¿Cómo almacenar archivos en el directorio de caché de Android?
- 23. cómo almacenar NSMutableArray en NSUserDefaults
- 24. ¿Cómo almacenar archivos en Emulator?
- 25. Android: ¿Cómo almacenar cookies?
- 26. Cómo almacenar varbinary en MySQL?
- 27. Cómo almacenar JSON en SQLite
- 28. Cómo almacenar unicode en MySQL?
- 29. ¿Cómo almacenar JSON en RavenDB?
- 30. Cómo almacenar CGGradientRef en NSMutableArray
[java.util.Properties] (http://download.oracle.com/javase/tutorial/essential/environment/properties.html) tal vez? Aunque tiene menos grano fino que las Preferencias. – BalusC
Supongo que aún no ha recurrido a [Javadoc] (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/prefs/Preferences.html). Hazlo y ver si todavía tienes algo que preguntar. –
@MarkoTopolnik quería decir "Estos datos se almacenan de forma persistente en una tienda de respaldo dependiente de la implementación.Las implementaciones típicas incluyen archivos planos, registros específicos del sistema operativo, servidores de directorio y bases de datos SQL. ** El usuario de esta clase no necesita preocuparse por los detalles de la tienda de respaldo. ** "??? – denys