Propiedades de Sistema en Java

En alguna ocasión nos encotramos con un problema de solución muy trivial, pero que no se suele estudiar, como por ejemplo obtener el valor de una propiedad del sistema anfitrión sobre el cual se ejecuta nuestra aplicación.
Situaciones tipicas son el saber que carácter se utiliza como salto de linea, cual es el separador de directorios, tipo de sistema operativo, versión de la máquina virtual, el nombre del usuario logueado, el idioma del sistema, o la carpeta de archivos temporales.

Todos esos valores podemos recuperarlos con un método del objeto System:

String path= System.getProperty("user.dir");

nos devuelve la ruta a la carpeta del usuario. El único misterio es saber el nombre exacto de la propiedad que necesitamos. En el ejempo "user.dir". En la práctica o pruebas con el valor que te imaginas para ver si hay suerte ¿Existirá una propiedad "user.name" que me devuelva el nombre del usuario?, haces una búsqueda con google o en un primer intento obtienes todas las propiedades para saber cual es el nombre de la que te interesa y en el segundo ya recuperas únicamente la que te interesa.

Como ejempo esta es la lista completa de mi sistema, en formato nombre de la propiedad y valor. Por ejemplo en el caso de que quisiésemos obtener el número de la versión de java ejecutaríamos

String javaVersion= System.getProperty("java.vm.version");

y obtendríamos un valor para javaVersion de  20.5-b03. Véase la tercera linea.

java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=C\:\\Program Files\\Java\\jre6\\bin
java.vm.version=20.5-b03
java.vm.vendor=Sun Microsystems Inc.
java.vendor.url=http\://java.sun.com/
path.separator=;
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg=sun.io
sun.java.launcher=SUN_STANDARD
user.country=ES
sun.os.patch.level=Service Pack 1
java.vm.specification.name=Java Virtual Machine Specification
user.dir=C\:\\work\\workshop\\jnplcode\\target
java.runtime.version=1.6.0_30-b12
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=C\:\\Program Files\\Java\\jre6\\lib\\endorsed
os.arch=amd64
java.io.tmpdir=C\:\\Users\\Andres\\AppData\\Local\\Temp\\
line.separator=\r\n
java.vm.specification.vendor=Sun Microsystems Inc.
user.variant=
os.name=Windows 7
sun.jnu.encoding=UTF-8
java.library.path=C\:\\Windows\\system32;C\:\\Windows\\Sun\\Java\\bin;C\:\\Windows\\system32;C\:\\Windows;C\:\\Windows\\system32;C\:\\Windows;C\:\\Windows\\System32\\Wbem;C\:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C\:\\Program Files (x86)\\ATI Technologies\\ATI.ACE\\Core-Static;C\:\\Program Files\\Java\\jdk1.6.0_30;C\:\\work\\apache-maven-3.0.3\\bin;C\:\\Program Files\\TortoiseSVN\\bin;.
java.specification.name=Java Platform API Specification
java.class.version=50.0
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
os.version=6.1
user.home=C\:\\Users\\Andres
user.timezone=Europe/Paris
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=UTF-8
java.specification.version=1.6
java.class.path=jnplcode-1.0.jar
user.name=Andres
java.vm.specification.version=1.0
sun.java.command=jnplcode-1.0.jar MariChuss
java.home=C\:\\Program Files\\Java\\jre6
sun.arch.data.model=64
user.language=es
java.specification.vendor=Sun Microsystems Inc.
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode
java.version=1.6.0_30
java.ext.dirs=C\:\\Program Files\\Java\\jre6\\lib\\ext;C\:\\Windows\\Sun\\Java\\lib\\ext
sun.boot.class.path=C\:\\Program Files\\Java\\jre6\\lib\\resources.jar;.....
java.vendor=Sun Microsystems Inc.
file.separator=\\
java.vendor.url.bug=http\://java.sun.com/cgi-bin/bugreport.cgi
sun.io.unicode.encoding=UnicodeLittle
sun.cpu.endian=little
sun.desktop=windows
sun.cpu.isalist=amd64

La programación optimista nos puede llevar a pensar que nuestro desarrollo se va a ejecutar siempre en un determinado entorno. Pero intentar guardar un archivo en C:\carpetamolona\ en un sistema linux posiblemente nos muestre un feo mensaje.

Comentarios