feed twitter facebook LinkedIn facebook

Java » Como ejecutar un comando del sistema desde Java

abril 9, 2012 por Feffo 12 Comentarios Imprimir Imprimir

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.

Descargar el Codigo
Descargar el código
Error en el Codigo
Error en el código
Foro sobre Java
Foro sobre Java
tags: , , , , , ,

Artículos relacionados:

12 comentarios »

RSS feed para los comentarios de esta entrada. TrackBack URI

1 2
  1. Matthew Collins
    mayo 23, 2012 #

    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 :)

  2. Feffo
    mayo 24, 2012 #

    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.

  3. Matthew Collins
    mayo 24, 2012 #

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

  4. Feffo
    mayo 25, 2012 #

    no entendí la pregunta D:

  5. Matthew Collins
    mayo 25, 2012 #

    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?

  6. Feffo
    mayo 25, 2012 #

    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/

  7. Feffo
    mayo 25, 2012 #

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

  8. Matthew Collins
    mayo 25, 2012 #

    gracias :)

  9. RiKr2
    abril 11, 2013 #

    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?

  10. Feffo
    abril 11, 2013 #

    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

1 2

Deja un comentario

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*