title: Java Input/Output streams with .exe
body: <p>What I want to do is, launch a .exe console program with Java, and use Java to manipulate the input and output streams from the console window. I know I can get the input and output streams from an application, and this is how I am currently doing it:</p>
  
  <pre><code>    try {
          process = Runtime.getRuntime().exec("C:\\Users\\Owner\\Documents\\testApp\\console.exe");
      } catch (IOException e1) {
          e1.printStackTrace();
          return;
      }
  
      stdin = process.getOutputStream();
      stdout = process.getInputStream();
  </code></pre>
  
  <p>Then, I can use a BufferedReader to show output that the .exe would normally display, however I cannot figure out how to pass input from the Java application console program to the actual .exe input stream. I need some help with how to do this.</p>
  
  <p>Edit: 
  Ok, I now have this, which works concurrently; however, I can't seem to get any output related to any input I take from the Java console window.</p>
  
  <pre><code>    new Thread(new Runnable() {
          public void run() {
              String line;
              BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
              try {
                  while ((line = br.readLine()) != null) {
                      System.out.println("[OUT] " + line);
                  }
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
      }).start();
  
      new Thread(new Runnable() {
          public void run() {
              try {
                  byte[] buffer = new byte[1024];
  
                  int bytesRead;
                  while ((bytesRead = System.in.read(buffer)) != -1) {
                      for(int i = 0; i &lt; buffer.length; i++) {
                          int intValue = new Byte(buffer[i]).intValue();
                          if (intValue == 0) {
                              bytesRead = i;
                              break;
                          }
                      }
                      // for some reason there are 2 extra bytes on the end
                      stdin.write(buffer, 0, bytesRead-2);
                      System.out.println("[IN] " + new String(buffer, 0, bytesRead-2) + " [/IN]");
                  }
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
      }).start();
  </code></pre>