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 servidio. 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 dle 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 tienen 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