Estoy empezando con todo esto de Java y me gustaría saber como se puede lanzar la ejecución de un comando del sistema donde se esté ejecutando la clase Java. Por ejemplo 'ls -l ' en Linux.
Se trata en este caso de pedir a java que ejecute una aplicación externa, en este caso el interprete de comandos y que lance en el un proceso. Para ello necesitamos conocer el programa que actúa como interprete de comandos . Lo primero que necesitamos es recuperar una instancia de la clase de Java que interactúa con el entorno. Esta clase es Runtime, y nos proporciona de forma estática una instancia de si misma: Runtime. GetRuntime() El método exec(String command) de Runtime ejecuta un comando en el entorno en el que está corriendo la máquina virtual, devolviendonos el manejador del proceso Process que ha sido creado al lanzarlo. Este manejador nos permite entre otras cosas matar después al proceso. Una forma resumida sería (En Windows el interprete de comandos es cmd.exe): Process miProceso = Runtime.getRuntime().exec("cmd.exe /C dir"); o bien Process miProceso = Runtime.getRuntime().exec("ls -l"); Un ejemplo un poco más elaborado sería: public boolean executeCommand ( String command, boolean flagbackground) { // Definimos la cadena del interprete de comandos del sistema String commandShell=null; // Recuperamos el sistema operativo String osName = System.getProperty ( "os.name" ); // Cargamos la cadena del interprete de comandos según el sistema operativo y el comando a ejecutar if ( osName.equals ("Windows NT") ) commandShell = "cmd.exe /C " + command; else if ( osName.equals ("Windows 95") || osName.equals ("Windows 98") ) commandShell = "start " + command; else { // En UNIX y LUNUX podemos lanzar el proceso en background sufijandolo con & if (flagbackground) commandShell = "" + command +" &" ; else commandShell = "" + command ; } // Lanzamos el proceso try { Process proc = Runtime.getRuntime ().exec (commandShell); BufferedReader brStdOut = new BufferedReader(new InputStreamReader(proc.getInputStream())); BufferedReader brStdErr = new BufferedReader(new InputStreamReader(proc.getErrorStream())); String str=null; while ((str = brStdOut.readLine())!=null) { System.out.println (str); } brStdOut.close(); brStdErr.close(); } catch (IOException eproc) { System.out.println ("Error to execute the command : "+eproc); return false; } return true; }