Gestión de propiedades en aplicaciones Java

Cuando se diseña una aplicación generalmente se guardan una serie de características (Configuración de directorios, look & feel, etc) que el usuario configura con respecto a la aplicación para personalizarla a su gusto. Estas características generalmente se conocen como propiedades. En la plataforma Java existe una clase pensada para almacenar, recuperar y gestionar estas propiedades, es la clase Properties.

La clase Properties no es mas que un diccionario de propiedades donde a través del método getProperty, se puede acceder a los valores de las propiedades solicitadas, y mediante el método setProperty se pueden fijar valores para propiedades ya existentes, o bien crear nuevas propiedades.

Lo mejor es ver un pequeño ejemplo de código para ver como funciona esta clase:

		String propsPath = "."+File.separator+"conf"+File.separator+"about.prop";
		//Creo un conjunto vacío de propiedades ...
		Properties properties = new Properties();
		FileInputStream fis;
		try {
			fis = new FileInputStream(propsPath);
			//Recupero el conjunto de propiedades desde un fichero de texto
			properties.load(fis);
			//Cierro el flujo de datos de entrada.
			fis.close();
		} catch (FileNotFoundException e2) {
			e2.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		}
		//Recupero una propiedad del conjunto de propiedades y la imprimo por pantalla.
		String directorio = properties.getProperty("DIRECTORIO_DE_USUARIO");
		directorio = (directorio == null) ? "" : directorio;
		System.out.println(directorio);
		//Creo una nueva propiedad en la lista y le doy un nuevo nombre.
		properties.setProperty("NOMBRE_AUTOR", "Francisco J. Güemes");
		FileOutputStream fos;
		try {
			fos = new FileOutputStream(propsPath);
			//Almaceno las propiedades en un fichero de texto.
			properties.store(fos, "Lista de propiedades de Ejemplo");
			//Cierro el flujo de datos de salida.
			fos.close();
		} catch (FileNotFoundException e2) {
			e2.printStackTrace();
		} catch (IOException e2) {
			e2.printStackTrace();
		}

En el ejemplo se ve claramente como crear un conjunto de propiedades, como recuperar las propiedades desde un fichero almacenado en disco, como recuperar el valor de una propiedad, como establecer el valor, o crear una nueva propiedad y finalmente como almacenar el conjunto de propiedades nuevamente en el fichero del disco.

Al almacenar y leer las propiedades de ficheros de texto hay que tener en cuenta que la clase Properties está únicamente preparada para leer y escribir ficheros de texto en codificación ISO 8859-1. Es un detalle importante a tener en cuenta para evitar problemas de encoding y decoding (caracteres raros) si se modifica alguna vez manualmente algún fichero de propiedades.

En cuestiones de almacenamiento del conjunto de propiedades, también cabe destacar que se puede almacenar y recuperar de un fichero XML. Este fichero deberá cumplir con la definición de documento: &lt!DOCTYPE properties SYSTEM “http://java.sun.com/dtd/properties.dtd”&gt, así como con la DTD especificada en la definición. Para guardar el conjunto de propiedades en XML se usa el método storeToXML y para recuperarlo loadFromXML.

Una buena practica que se suele realizar con respecto a las propiedades, es no limitarse a usar la clase Properties, sino crear una clase que derive de esta, y en la que se definan los nombres de las distintas propiedades del conjunto como constantes públicas. De esta forma los nombres de las propiedades estarán siempre accesibles para el resto de los desarrolladores, sin tener que consultar la documentación de desarrollo.

Otra buena practica es crear un método en la clase derivada que ponga valores por defecto para las propiedades en caso de que al recuperar las propiedades del fichero suceda algún tipo de contratiempo, como que un usuario malicioso haya borrado el fichero de propiedades.

Fuentes:

Acerca de franciscoguemes

Ingeniero en Informática
Esta entrada fue publicada en Java. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s