Ejecutar comandos del sistema

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.

1 Respuesta

Respuesta
1
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;
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas