## Seleccionar y Utilizar Propiedades

En Java, los atributos del programa están representados por la clase Properties del paquete java.util. Un objeto Propierties contiene un juego de parejas clave/valor. Estas parejas clave/valor son como las entradas de un diccionario: la clave es la palabra, y el valor es la definición.

Tanto la clave como el valor son cadenas. Por ejemplo, os.name es la clave para una de las propiedades del sistema por defecto de Java--el valor contiene el nombre del sistema operativo actual. Utilice la clave para buscar una propiedad en la lista de propiedades y obtener su valor. En mi sistema, cuando busco la propiedad os.name, su valor Windows 95/NT. El tuyo probablemente será diferente.

Las propiedades específicas de un programa deben ser mantenidas por el propio programa. Las propiedades del sistema las mantiene la clase java.lang.System. Para más información sobre las propiedades del sistema puedes referirte a: Propiedades del Sistema en la lección Utilizar los Recursos del Sistema.

Se puede utilizar la clase Propierties del paquete java.util para manejar atributos específicos de un programa. Se puede cargar los pares clave/valor dentro de un objeto Propierties utilizando un stream, grabar las propiedades a un stream y obtener información sobre las propiedades representadas por el objeto Propierties.

### Seleccionar un Objeto Properties

> Frecuentemente, cuando un programa arranca, utiliza un código similar a este para seleccionar un objeto Propierties:

>     . . .
>         // selecciona las propiedades por defecto
>     Properties defaultProps = new Properties();
>     FileInputStream defaultStream = new FileInputStream("defaultProperties");
>     defaultProps.load(defaultStream);
>     defaultsStream.close();

>         // selecciona las propiedades reales
>     Properties applicationProps = new Properties(defaultProps);
>     FileInputStream appStream = new FileInputStream("appProperties");
>     applicationProps.load(appStream);
>     appStream.close();
>     . . .

> Primero la aplicación selecciona un objeto Properties para las propiedades por defecto. Este objeto contiene un conjunto de propiedades cuyos valores no se utilizan explícitamente en ninguna parte. Este fragmenteo de código utiliza el método load() para leer el valor por defecto desde un fichero de disco llamado defaultProperties. Normalmente las aplicaciones guardan sus propiedades en ficheros de disco.

> Luego, la aplicación utiliza un constructor diferente para crear un segundo objeto Properties applicationProps. Este objeto utiliza defaultProps para proporcionarle sus valores por defecto.

> Después el código carga un juego de propiedades dentro de applicationProps desde un fichero llamado appProperties. Las propiedades cargadas en appProperties pueden seleccionarse en base al usuairo o en base al sistema, lo que sea más apropiado para cada programa. Lo que es importante es que el programa guarde las Propiedades en un posición "CONOCIDA" para que la próxima llamada al programa pueda recuperarlas. Por ejemplo, el navegador HotJava graba las propiedades en el directorio raiz del usuario.

> Se utiliza el método save() para escribir las propiedades en un canal:

>     FileOutputStream defaultsOut = new FileOutputStream("defaultProperties");
>     applicationProps.save(defaultsOut, "---No Comment---");
>     defaultsOut.close();

El método save() necesita un stream donde escribir, y una cadena que se utiliza como comentario al principio de la salida.

### Obtener Información de las Propiedades

> Una vez que se han seleccionado las propiedades de un pograma, se puede pedir información sobre la propiedades contenidas. La clase Properties proporciona varios métodos para obtener esta información de las propiedades:
> getProperty() (2 versiones)
>   Devuelve el valor de la propiedad especificada. Una versión permite un valor por defecto, si no se encuentra la clase, se devuelve el valor por defecto.
> list()
>   Escribe todas las propiedades en el canal especificado. Esto es útil para depuración.
> propertyNames()
>   Devuelve una lista con todas las claves contenidas en el objeto Properties.

Consideraciones de Seguridad: Observa que el acceso a las propiedades está sujeto a la aprobación del manejador de Seguridad. El programa de ejemplo es una aplicación solitaria, que por defecto, no tiene manejador de seguridad. Si se intenta utilizar este código en un applet, podría no trabajar dependiendo del navegador. Puedes ver: Entender las Capacidades y Restricciones de un Applet para obtener más información sobre las restricciones de seguridad en los applets.

Ozito