The Java Program: Execute.java

  1 import java.io.*;
  2 
  3 class Execute {
  4 
  5    public static void main (final String args[]) {
  6       String input = (args.length>1)?args[1]:"";
  7       try {
  8          final Process proc = Runtime.getRuntime().exec(args[0]);
  9          final BufferedReader readConsole =
 10             new BufferedReader (new InputStreamReader (proc.getInputStream()));
 11          final BufferedReader errorConsole =
 12             new BufferedReader (new InputStreamReader (proc.getErrorStream()));
 13          final BufferedWriter writeConsole =
 14             new BufferedWriter (new OutputStreamWriter(proc.getOutputStream()));
 15 
 16          final WriterThread myWriterThread =
 17             new WriterThread (new StringReader (input),writeConsole);
 18          final ReaderThread myReaderThread = new ReaderThread (readConsole);
 19          final ReaderThread myErrorReaderThread = new ReaderThread (errorConsole);
 20          
 21          myWriterThread.join();
 22          myReaderThread.join();
 23          myErrorReaderThread.join();
 24          final int ret = proc.waitFor();
 25 
 26          System.out.println ("Standard input :\n" + input);
 27          System.out.println ("Standard output:\n" + myReaderThread.output);
 28          System.out.println ("Standard error :\n" + myErrorReaderThread.output);
 29          System.out.println ("Return code = " + ret);
 30 
 31       } catch (IOException e) {
 32          e.printStackTrace (System.err);
 33       } catch (InterruptedException e) {
 34          e.printStackTrace (System.err);
 35       }
 36    }
 37 
 38    static class ReaderThread extends Thread {
 39       private final BufferedReader from;
 40       public final StringBuffer output = new StringBuffer ();
 41       ReaderThread (BufferedReader r) { from=r; start(); }
 42       public void run() {
 43          String line;
 44          try {
 45             while ((line = from.readLine()) != null) {
 46                output.append(line+"\n"); 
 47             }
 48             from.close();
 49          } catch (IOException e) {
 50             e.printStackTrace();
 51          }
 52       }
 53    }
 54 
 55    static class WriterThread extends Thread {
 56       private final BufferedReader from;
 57       private final BufferedWriter to;
 58       WriterThread (Reader r, BufferedWriter w) {
 59          from=new BufferedReader(r); to=w; start();
 60       }
 61       public void run() {
 62          String line;
 63          try {
 64             while ((line = from.readLine()) != null) {
 65                to.write (line);
 66                to.newLine();
 67             }
 68             from.close();
 69             to.close();
 70          } catch (IOException e) {
 71             e.printStackTrace();
 72          }
 73       }
 74    }
 75 
 76 
 77 }