Como ejecutar un comando del sistema desde Java

09/abr/2012 Java , , , , 16 Comentarios
java

Hoy les traigo una forma de poder ejecutar un comando de consola en Java. La clave para ejecutar un comando en Java esta en los métodos exec(String command) y exec(String[] cmdarray).

La diferencia entre estos dos métodos Java es que el primero esta destinado a ejecutar comandos sin argumentos:

  1. try {
  2. String cmd = "halt"; //Comando de apagado en linux
  3. Runtime.getRuntime().exec(cmd);
  4. } catch (IOException ioe) {
  5. System.out.println (ioe);
  6. }

Y el segundo si, solo que deben poner cada 'palabra' en un índice distinto en el arreglo Java:

  1. try {
  2. String [] cmd = {"shutdown","-s","-t", "10"}; //Comando de apagado en windows
  3. Runtime.getRuntime().exec(cmd);
  4. } catch (IOException ioe) {
  5. System.out.println (ioe);
  6. }

Recordar que el comando se va a ejecutar en un proceso Java aparte.

Otra cosa a tener en cuenta es el retorno que brindan estos métodos. Para ello tenemos el objeto de tipo Process.

La clase Process posee algunos métodos interesantes, en especial el metodo public abstract InputStream getInputStream(), ya que con él podemos obtener un Stream para poder leer lo que el comando que ejecutamos escribío en la consola.

  1. Process process = Runtime.getRuntime().exec("lsb_release -a");
  2. InputStream inputstream = process.getInputStream();
  3. BufferedInputStream bufferedinputstream = new BufferedInputStream(inputstream);

En mi caso, obtuve el siguiente texto al leer las lineas del buffer.

Distributor ID:	Ubuntu
Description:	Ubuntu 11.10
Release:	11.10
Codename:	oneiric

Espero que les haya gustado el artículo.

Vídeos sobre Java

Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D

16 comentarios en “Como ejecutar un comando del sistema desde Java”

Feffo

RiKr2

Hola Diana, creo ke podria ser una solucion ejecutar Runtime.getRuntime().exec(“cmd /K java -jar Z:\efactura\efactura-1.0.jar -factura …(lo otro)”).

Pruebalo y me dices. ;)

Feffo

Diana Gonzalez

Hola gracias de antemano !, tengo un archivo java que llamo desde la consola pero dicho archivo esta en un servidor fuera de la raiz. Como podría cambiar desde java el directorio para luego ejecutar el comando. Manualmente lo realizo así:

cmd..

Z:
cd efactura
java -jar efactura-1.0.jar -factura…(los demas parametros)

Feffo

Chepe

hola tengo una pregunta que es de mi interes.Yo tengo que hacer un programa donde actualice remoto cualquier tipo de fichero para el caso de linux tengo que actualizar paquetes .deb ¿De que manera puedo instalar un .deb en java (es decir codigo en java)a partir de comandos por consola, asi tambien los .exe tambien?.Si me pudieran dar respuesta lo antes posible se los agradeceria .gracias

Feffo

aneury

esta muy buena la guia pero si quisiera un comando en un path diferente y que no sea c: ?

Feffo

Jaz Juarez

Perfecto! funcionó totalmente la primera, aunque deberías mencionar que hay que importar Java.IOException para que funcione, para nosotros los inexpertos… a mi me lo dijo netbeans, pero no sé si todos los compiladores lo hagan… Muchas graciasª!!

Feffo

lobozoldick

Estimado Feffo, excelente aporte, pero me podrías dar una mano con un error que me esta entregando un comando, te explico:

resulta que ejecuto elsiguiente comando Strin[] cmd = {“C:/workspace/Prueba/Aplicaciones/Mkvextract/mkvextract.exe”, “tracks”, “D:\Encodeos Personales\Shingeki no Kyojin\[EvermorE] Shingeki no Kyojin – 05 [1280x720p Hi10p H.264+AAC].mkv”, “0:\”C:/workspace/Prueba/tmp/[EvermorE] Shingeki no Kyojin – 05 [1280x720p Hi10p H.264+AAC].ass\””};

Resulta que me entrega error y pruebo ese mismo comando en la consola cmd y funciona, por lo que creo que al momento de pasarle comandos con los caracteres [] no funciona.

Crees que me podrías dar una manita, por favor.

Feffo

Feffo

Buenas RiKr2,
Es ‘como si’ fuese batch pero con algunas restricciones, java solo te permite la ejecución de un comando por vez y son totalmente independientes ya que cada comando genera un proceso nuevo en el sistema, en cambio batch puede llegar a ser una secuencia de comandos que incluso pueden llegar a estar relacionados con variables.

Si queres lograr la ejecución de un archivo batch en windows lo que se me ocurre que podes hacer es lo siguiente:
1) Crear un arreglo de String con las lineas que tendría tu archivo batch y luego escribir linea por linea, iterando sobre el arreglo, en un archivo temporal.
2) Almacenar un .bat dentro del .jar y con el uso del método getClass().getResourseAsStream(…) para poder leer el archivo en cuestión y lo copias tal cual está en una locación temporal o fija dentro de windows.

y una vez que tenes el archivo .bat en el sistema de archivos de windows, usando uno de estos métodos que propuse en este post, ejecutas tu .bat segun donde lo guardaste.

si no me equivoco con la siguiente ejecución seria suficiente:
Runtime.getRuntime().exec(“cmd.exe /K \”C:/path/to/file.bat\””);
* nota: el /K es para que cmd.exe ejecute como un comando el String que le pasas a continuación :)

Ojala haya respondido a tu pregunta, cualquier cosa no dudes en comentarlo :)

Saludos :D

Feffo

RiKr2

Hola Feffo, muy bueno tu aporte pero me gustaria saber algo mas, ¿esa es la forma de ejecutar cualquier comando de Windows como si fuera Batch desde Java?

Feffo

Matthew Collins

gracias :)

Feffo

Feffo

jajajaj que distraído, ya estábamos en ese post XD

Feffo

Feffo

vos decís de usar el modo incógnito de chrome por ejemplo?
sí es así no se como podes hacer, salvo que tengas un comando para cada navegador donde aclares el modo incógnito como argumento por ejemplo:

chromium-browser –incognito
firefox -private

es el comando que debes usar para ejecutar el chromium en modo incognito y firefox en modo privado

para ejecutar comandos de consola en java te recomiendo que veas este post que hice yo :)

http://lineadecodigo.com/java/como-ejecutar-un-comando-del-sistema-desde-java/

Feffo

Matthew Collins

haha no se como hacerme entender, pero bueno, por ejemplo, se inicia el navegador web pero no se ve. esta ejecutandose en modo oculto… sabes como hacer eso en java?

Feffo

Feffo

no entendí la pregunta D:

Feffo

Matthew Collins

Desktop.getDesktop().showUri(“http://www.google.com”); @Feffo y puedo hacer que ese proceso quede oculto que no muestre el navegador?

Feffo

Feffo

si querés mostrar cierta dirección web en tu navegador con que hagas
Desktop.getDesktop().showUri(“http://www.google.com”);

esto tiene una gran ventaja, ya que automáticamente se va a seleccionar el navegador por defecto que tengas en el sistema.

esto también sirve para mostrar archivos .pdf, .png, .jpg, etc.
para cada uno de ellos se usará la aplicación que este por defecto en el sistema operativo actual.

Feffo

Matthew Collins

muy buena explicacion me sirvio de gran ayuda gracias, y te queria pedir un favor, es que quiero ejecutar start “iexplorer” “http://www.google.com”, pero que este comando se ejecute y que no me muestre nada como si fuera invisible aunque en verdad el proceso si se esta ejecutando, sabes como ?
Gracias :)

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*


*