Como capturar os dados retornados de um EXE extraído de um lote?

Eu tenho um arquivo em lotes que precisa ser chamado de um programa java. O arquivo em lote invoca um EXE. O programa EXE retornará dados que eu quero manipular. Se o EXE imprimir dados no console, será possível capturá-lo da seguinte maneira. Mas quando o EXE éretornando dados após a sua conclusão, não sou capaz de capturá-lo.

ProcessBuilder pb = new ProcessBuilder("foo.bat");
Process p = pb.start();
int exitValue = p.waitFor();
BufferedReader reader;

// System.out.println("Exit Value" + exitValue);
if (exitValue == 0) {
    reader = new BufferedReader(new InputStreamReader(p
            .getInputStream()));
} else {
    reader = new BufferedReader(new InputStreamReader(p
            .getErrorStream()));
}

StringBuffer sb = new StringBuffer();
String temp = reader.readLine();
while (temp != null) {
    sb.append(temp);
    temp = reader.readLine();
}

reader.close();
System.out.println(sb.toString());

Como eu preciso para capturar os dados retornados pelo EXE executado a partir de um arquivo em lotes?

O EXE é basicamente um programa em C. Quando eu invoco o programa em C, o método principal me retorna os dados, que eu quero manipular.

questionAnswers(2)

yourAnswerToTheQuestion