Ejemplo de arranque de un programa externo desde java
Para arrancar un ejecutable externo desde java
tenemos la clase Runtime.
El modo de arrancar esta ejecutable externo es el
siguiente:
try
{
// directorio/ejecutable es el path del ejecutable y un
nombre.
Process p = Runtime.getRuntime().exec
("directorio/ejecutable");
}
catch (Exception e)
{
// Se lanza una excepción si no se encuentra en
ejecutable o el fichero no es ejecutable.
}
Hay una excepción que debemos capturar. Se
produce en caso de que no se encuentre el ejecutable que indicamos o si
se encuentra, que no se pueda arrancar (no tengamos permisos de acceso,
el fichero no sea un ejecutable, etc, etc).
Si no ponemos el path del ejecutable, el directorio
en el que se encuentra debe estar en la variable de entorno PATH, si
no, no sabrá dónde econtrar el ejecutable.
Un detalle para windows
Para poder aplicar esto, es necesario que el
ejecutable sea un fichero que exista. En windows, heredados del antiguo
ms-dos, existen ciertos comandos que no poseen un ejecutable propio.
Por ejemplo, el comando dir, por más que busquemos, no
encontraremos un dir.com ni un dir.exe ni un dir.bat ni nada parecido.
En el antiguo ms-dos había comandos internos y externos. Los
primeros los "entendía" el sistema operativo, no hacía
falta un ejecuable. Escribiamos "dir" y el ms-dos, sin necesidad de
buscar el ejecutable asociado, sabía lo que tenía que
hacer. Los externos son los que tenían ejecutable asociado.
Estos comandos que no tienen ejecutable, no se puede
arrancar directamente desde java. Hay que hacerlo de forma "indirecta".
Hay que arrancar una ventana de ms-dos y decirle cual es el comando que
tiene que ejecutar.
Cuando desde windows abrimos una ventana de ms-dos,
estamos ejecutando un programa que antes se llamaba command.com. Ahora,
además de este, hay un cmd.exe. Este programa es el que ejecuta
el comando dir. Realmente dir no es un ejecutable, es una
palabra/parámetro que cmd.exe entiende y hace algo en
consecuencia, mostrar los ficheros del directorio actual.
Por ello, si queremos arrancar un dir desde java,
debemos arrancar un cmd dándole como opción que ejecute
un dir. Es decir
Process p = Runtime.getRuntime().exec ("cmd /c dir");
Esto no pasa en linux (no hay comandos internos,
todos los comandos tienen ejecutable asociado). Con windows tendremos
que mirar si hay o no ejecuable externo. Por ejemplo, estos sí
tienen ejecutable aparte: notepad, netstat, format, etc.