Java Properties
Introducción
Java contiene cuatro clases contenedoras en el paquete java.util: Vector, Stack, Hashtable, y Properties.
En la documentación ustedes podrán ver las primeras, aquí estudiaremos
solo la última por su particular uso para definir configuraciones de
programas.
Motivación: Es común que
debamos definir la localización de un cierto servicio. Definirlo cada
vez en la línea de comando o en la interfaz resulta engorroso. También
es común hacer nuestras preferencias persistentes; es decir, que
perduren más allá del término de la ejecución del programa. Para esto
usamos la clase Properties.
La clase Properties nos permite manejar el conjunto de propiedades de
un programa. Éstas son como los parámetros del programa, pero se
almacenan en disco con lo cual tienen persistencia de una ejecución a
otra. Permite implementar funcionalidades al estilo de archivos de
configuración como “.conf” o los “.ini”
Estos archivos son de texto y editables. La clase Properties permite su creación y lectura en forma muy simple.
¿Cómo funciona?
La clase Properties es una tipo especial de tabla hash con las siguientes características:
-
La clave y el valor de la tabla son strings
-
La tabla puede ser grabada y recuperada de un stream con sólo una operación
-
Valores por defecto pueden ser definidos en una tabla secundaria
Uso de Properties
Un uso típico para el almacenamiento de preferencias del usuario:
Properties preferences = new Properties();
preferences.put(“Name”, “Harry Hacker”);
preferences.put(“Color”, “Purple”);
preferences.put(“Font”,”18 pt Troglodyte Bold”);
Para recuperar cualquier propiedad del objeto:
String font = preferences.getProperty(“Font”);
La tabla puede ser escrita a un archivo:
FileOutputStream out = new FileOutputStream (“myProg.ini”);
preferencies.save(out, “Preferences”);
El archivo creado myProg.ini queda con el siguiente contenido:
#Preferences
#Tue Nov 6 8:10:00 2001
Name=Harry Hacker
Color=Purple
Font=18 pt Troglodyte Bold
Obviamente las propiedades pueden ser recuperadas vía programa:
FileInputStream in = FileInputStream(“myProg.ini”);
preferences.load(in);
La definición de valores por defecto se especifica usando otro constructor:
Properties default = new Properties();
default.put(“Name”, “Unknown”);
default.put(“Color”, “Blue”);
default.put(“Font”, “10 pt Courier”);
Properties preferences = new Properties(default);
preferencies.put(“Name”, “Harry Hacker”);
....
// a este nivel todas las preferencias están definidas
String name = preferencies.getProperty(“Name”);
// retorna Harry Hacker
String color= preferencies.getProperty(“Color”);
// retorna Blue