Java Tips: Executando comandos externos

Nesta dica vamos abordar como executar comandos externos (shell, comando dos, etc.) no java. É útil quando precisamos executar algum shell script ou, no caso do Windows, um arquivo bat.

O código abaixo executa um shell script chamado gera-backup.sh e aguarda a execução desse script terminar antes de continuar com a execuação do programa java. Isso é possível devido à utilização do método waitFor().

 
import java.io.IOException;

public class ComandoExterno {
  
    public static void main(String[] args) {
        
        Process p;
        try {
            //executar rotina de backup
            p = Runtime.getRuntime().exec("/opt/gera-backup.sh"); 
            p.waitFor(); // espera pelo processo terminar
            
            // ....
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

Abaixo temos uma variação do programa acima, porém agora nosso programa java guarda a saída do comando ls -la, lendo a saída padrão e a saída de erro em variáveis. Após isso as variáveis são impressas:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ComandoExterno {

    public static void main(String[] args) {

        Process p;
        String stdIn = "", stdErr = "", s;
        try {
            //executar  ls -la no diretório corrente
            p = Runtime.getRuntime().exec("ls -la");

            BufferedReader stdInput = new BufferedReader(new
                 InputStreamReader(p.getInputStream()));

            BufferedReader stdError = new BufferedReader(new
                 InputStreamReader(p.getErrorStream()));

            // lê o conteudo da saída padrão do comando e guarda em variável
            while ((s = stdInput.readLine()) != null) {
                stdIn += s + "\n";
            }

            // lê o conteudo da saída de erro do comando e guarda em variável
            while ((s = stdError.readLine()) != null) {
                stdErr += s + "\n";
            }

            // Exibir a saída padrão e de erro na tela
            System.out.println("Saida Padrao: \n" + stdIn);
            System.out.println("Saida Erro: \n" + stdErr);

        }
        catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

Saída do nosso programa acima:

root@ubuntu:~/java# java ComandoExterno
Saida Padrao:
total 16
drwxr-xr-x 2 root root 4096 2011-08-05 11:15 .
drwx------ 6 root root 4096 2011-08-05 11:15 ..
-rw-r--r-- 1 root root 1456 2011-08-05 11:15 ComandoExterno.class
-rw-r--r-- 1 root root 1249 2011-08-05 11:15 ComandoExterno.java

SaidaErro:

root@ubuntu:~/java#
Please follow and like us:

Comments

  1. By ads

    • mm By pasquati

  2. By nada

  3. By Josafá Santos

    • By leandro

      • mm By pasquati

  4. By leandro

    • mm By pasquati

  5. By Josélito Andrade

    • mm By Douglas V. Pasqua

Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: