// En este ejemplo veremos como leer los datos de salida de una orden
// que muestra datos (por ejemplo "CMD /C dir")
// NOTA -Uso de un shell secundario- CMD /C orden ...
//          invoca una copia del shell para que ejecute la orden y retorne
//          no devuelve indicación de error 
//          (el código de retorno es el del propio CMD, y no el de la orden ejecutada)
// En principio se los manda al propio objeto
// por lo que debemos leerlos y mostrarlos por pantalla
// si no lo hacemos asi, no veremos nada de nada
// (intentarlo con Ejemplo1 y no se ve salida alguna)

import java.io.*;

public class Ejemplo2{
    void abre(String comando){
        Runtime r=Runtime.getRuntime();
        Process p;
        try{
            p=r.exec(comando);
            // Aqui voy a leer lo que me envia la orden
            InputStream is=p.getInputStream();
            InputStreamReader isr= new InputStreamReader(is);
            BufferedReader br=new BufferedReader(isr);
            String linea=br.readLine();
            while(linea!=null){
                System.out.println(linea);
                linea=br.readLine();
            }
            // Cerrando en orden la barraca
            br.close();
            // Esto es para que espere hasta que Process termine, que el metodo es un cagaprisas
            int valorDevuelto;
            valorDevuelto=p.waitFor();
            System.out.println("Que ya he acabao, majete");
        }catch(Exception e){
            System.out.println("Error");
            e.printStackTrace();
        }   
    }
}