Java Tips: Executando comandos externos

Posted on agosto 6, 2011. Filed under: Java, Tips |

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#

Make a Comment

Deixe uma resposta para pasquati Cancelar resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

8 Respostas to “Java Tips: Executando comandos externos”

RSS Feed for Pasqua Tecnologia Comments RSS Feed

no me sirvio 😦

Houve algum exception ? Qual foi a dificuldade ?

Muito bom cara ..
se garantiu

Para mim, só funcionou depois que digitei o comando assim: “//opt//gera-backup.sh”.
O arquivo não estava sendo encontrado.

oi nome caso ainda nao encontrou o arquivo coloquei as duas barras e ainda nao o que posso fazer para achar o arquivo eu criei como texto alguma outra ideia sem mais me despeco e obrigado

Olá Leandro,
Você esta no windows ou no Linux ?

Caso estiver no Windows, utilize da seguinte maneira:

p = Runtime.getRuntime().exec("C:/diretorio1/diretorio2/comando.exe");

Caso estiver no Linux, verifique se o caminho que esta inserindo no programa java realmente existe e tem permissão de execução. Para tirar a prova, pegue o comando que esta no java e digite no shell ou na linha de comando.

Boa sorte.

mesmo o colocando o caminho do diretorio ainda assim nao consegui rodar o arquivo de comando sera por que estou em rede da a seguinte mensagem.
Caused by: java.io.IOException: CreateProcess error=2, O sistema não pode encontrar o arquivo especificado
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
… 5 more

Cole aqui também o código java que esta tentando executar.


Where's The Comment Form?

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: