Propiedades del Sistema

La clase System mantiene un conjunto de propiedades -- parejas clave/valor -- que definen atributos del entorno de trabajo actual. Cuando arranca el sistema de ejecución por priemra vez, las propiedades del sistema se inicializan para contener información sobre el entorno de ejecución. Incluyendo información sobre el usuario actual, la versión actual del runtime de Java, e incluso el carácter utilizado para separar componentes en un nombre de fichero.

Aquí tiene una lista completa de las propiedades del sistema que puede obtener el sistema cuando arranca y lo que significan:

Clave                   Significado                       Acceden los Applets
-------------------     ------------------------------    -------------
"file.separator"        File separator (e.g., "/")        si

"java.class.path"       Java classpath                    no
"java.class.version"    Java class version number         si
"java.home"             Java installation directory       no
"java.vendor"           Java vendor-specific string       si
"java.vendor.url"       Java vendor URL                   si
"java.version"          Java version number               si

"line.separator"        Line separator                    si

"os.arch"               Operating system architecture     si
"os.name"               Operating system name             si

"path.separator"        Path separator (e.g., ":")        si

"user.dir"              User's current working directory  no
"user.home"             User home directory               no
"user.name"             User account name                 no
Los programas Java pueder leer o escribir las propiedades del sistema a través de varios métodos de la clase System. Se puede utilizar una clave para buscar una propiedad en la lista de propiedades, o se puede obtener el conjunto completo de propiedades de una vez. También se puede cambiar el conjunto de propiedades completamente.


Consideraciones de Seguridad: Los Applets pueden acceder a las propiedades del sistema pero no a todas. Para obtener una lista completa de las propieades del sistema que pueden y no pueden ser utilizadas por los applets, puedes ver :Leer las Propiedades del Sistema. Los applets no pueden escribir las propiedades del sistema.

Leer las Propiedades del Sistema

La clase System tiene dos métodos que se pueden utilizar para leer las propiedades del sistema: getProperty() y getProperties.

La clase System tiene dos versiones diferentes de getProperty(). Ambas versiones devuelven el valor de la propiedad nombrada en la lista de argumentos. La más simple de las dos getProperty() toma un sólo argumento: la clave de la propiedad que quiere buscar. Por ejemplo, para obtener el valor de path.separator, utilizamos la siguiente sentencia:

System.getProperty("path.separator");
Este método devuelve una cadena que contiene el valor de la propiedad. Si la propiedad no existe, esta versión de getProperty() devuelve null.

Lo que nos lleva a la siguiente versión de getProperty(). Esta versión requiere dos argumentos String: el primer argumento es la clave que buscamos y el segundo es el valor por defecto devuelto si la clave no se encuentra o no tiene ningún valor. Por ejemplo, esta llamada a getProperty() busca la propiedad del sistema llamada subliminal.message. Esto no es una propiedad válida del sistema, por lo que en lugar de devolver null, este método devolverá el valor proporcionado por el segundo argumento: "Compra Java ahora".

System.getProperty("subliminal.message", "Compra Java ahora!");
Se deberá utilizar esta versión de getProperty() si no se quiere correr el riesgo de una excepción NullPointerException, o si realmente se quiere proporcionar un valor por defecto para una propiedad que no tiene valor o que no ha podido ser encontrada.

El último método proporcionado por la clase System para accer a los valores de las propiedades es el método getProperties() que devuelve Propiedad un objeto que contiene el conjunto completo de las propiedades del sistema. Se pueden utilizar varios métodos de la clase Propierties para consultar valores específicos o para listar el conjunto completo de propiedades. Para más información sobre la clase Propierties, puedes ver Seleccionar y utilizar Propiedades.

Escribir Propiedades del Sistema

Se puede modificar el conjunto existente de las propiedades del sistema, utilizando el método setProperties() de la clase System. Este método toma un objeto Propierties que ha sido inicializado para contener parejas de clave/valor para las propiedades que se quieren modificar. Este método reemplaza el conjunto completo de las propiedades del sistema por las nuevas representadas por el objeto Propierties.

Aquí tenemos un pequeño programa de ejemplo que crea un objeto Propierties y lo inicializa desde un fichero:

subliminal.message=Buy Java Now!
El programa de ejemplo utiliza System.setProperties() para instalar el nuevo objeto Propierties como el conjunto actual de propiedades del sistema.
import java.io.FileInputStream;
import java.util.Properties;

class PropertiesTest {
    public static void main(String[] args) {
        try {
                // selecciona el nuevo objeto propierties a partir de "myProperties.txt"
            FileInputStream propFile = new FileInputStream("myProperties.txt");
            Properties p = new Properties(System.getProperties());
            p.load(propFile);

                // selecciona las propiedades del sistema
            System.setProperties(p);
            System.getProperties().list(System.out);    // selecciona las nuevas propiedades
        } catch (java.io.FileNotFoundException e) {
            System.err.println("Can't find myProperties.txt.");
        } catch (java.io.IOException e) {
            System.err.println("I/O failed.");
        }
    }
}
Observa que el programa de ejemplo crea un objeto Properties, p, que se utiliza como argumento para setProperties():
Properties p = new Properties(System.getProperties());
Esta sentencia inicializa el nuevo objeto Propierties, p con el conjunto actual de propiedades del sistema, que en el caso de este pequeño programa es el juego de propiedades inicializado por el sistema de ejecución. Luego el programa carga las propiedades adicionales en p desde el fichero myProperties.txt y selecciona las propieades del sistema en p. Esto tiene el efecto de añadir las propiedades listadas en myProperties.txt al juego de propiedades creado por el sistema de ejecución durante el arranque. Observa que se puede crear p sin ningún objeto Properties como este:
Properties p = new Properties();
Si se hace esto la aplicación no tendrá acceso a las propieades del sistema.

Observa también que las propiedades del sistema se pueden sobreescribir! Por ejemplo, si myProperties.txt contiene la siguiente línea, la propiedad del sistema java.vendor será sobreescrita:

java.vendor=Acme Software Company
En general, ten cuidado de no sobreescribir las propiedades del sistema.

El método setProperties() cambia el conjunto de las propiedades del sistema para la aplicación que se está ejecutando. Estos cambios no son persistentes. Esto es, cambiar las propiedades del sistema dentro de una aplicación no tendrá ningún efecto en próximas llamadas al intérprete Java para esta u otras aplicaciones. El sistema de ejecución re-inicializa las propiedades del sistema cada vez que arranca. Si se quiere que los cambios en las propiedades del sistema sean persistentes, se deben escribir los valores en un fichero antes de salir y leerlos de nuevo cuando arranque la aplicación.


Ozito