Capturando a saída de ProcessBuilder.exec()

2 respostas
M

Olá todos, estou tentando capturar a saída de um programar que executo usando ProcessBuilder… Ok consigo obter a saída sem problemas… mas se o comando é “java -version” não consigo capturar… o código está abaixo… Colei abaixo o código… bom do jeito que está o programa não imprime nada… mas se substituir por exemplo o nome do programa por “tar” e o argumento pra “–version” ele imprime o resultado esperado… Aguardo respostas galera… vlw…

package teste;

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

public class Teste {

    public Teste() {
    }
    
    public static void main(String args[]) {
        ProcessBuilder pBuilder = new ProcessBuilder("java", "-version");
        String line = null;
        
        try {
            Process p = pBuilder.start();
            p.waitFor();
            BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

            while((line = reader.readLine()) != null)
            {
                System.out.println(line);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    } 
}

2 Respostas

L

Parece que java -version manda o output para stderr.

Coloque a seguinte instrução após criar o seu ProcessBuilder, e deve funcionar:

ProcessBuilder pBuilder = new ProcessBuilder("java", "-version");
         pBuilder.redirectErrorStream(true);

Completo:

import java.io.BufferedReader;
 import java.io.*;
 
 public class Teste2 {
 
     public Teste2() {
     }
     
     public static void main(String args[]) {
         ProcessBuilder pBuilder = new ProcessBuilder("java", "-version");
         pBuilder.redirectErrorStream(true);
         
         String line = null;
         
         try {
             Process p = pBuilder.start();
             p.waitFor();
             BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
 
             while((line = reader.readLine()) != null)
             {
                 System.out.println(line);
             }
         } catch (Exception ex) {
             ex.printStackTrace();
         }
     } 
 }

Talvez, dependendo do que você queira fazer, seja bom você colocar essa leitura da stream em uma thread para evitar que sua Thread principal fique bloqueada aguardando alguma entrada de dados por exemplo.

[]'s
Leandro

M

Valeu cara pela resposta…!! hehehe cometi uma garfe… eh ProcessBuilder.start() :stuck_out_tongue: abração, vou testar… se funcionar posto aqui… abraço…

Criado 31 de julho de 2007
Ultima resposta 31 de jul. de 2007
Respostas 2
Participantes 3