2011-08-06 5 views
0

비슷한 스레드가 있다는 것을 알고 있으며, 모두 읽었습니다. 그러나 그들 중 누구도 어떤 도움도받지 못했습니다.자바의 Windows 배치 파일 (또는 외부 프로그램)과 통신

@echo off 
set /p UserInput=Enter a number: 
echo Number was %UserInput% 

나는 자바에서이 배치 파일을 실행하려면, 그것은에 번호를 전송하고 입력을 얻을 :

나는이 간단한 배치 파일이 있습니다.

이상한 문제가 있습니다. cmd/c를 사용하여 배치 파일을 시작하고 입력 스트림과 출력 스트림을 열었지만 여전히 작동하지 않습니다.

마이크로 소프트 윈도우 ... 저작권 (C) 2009 마이크로 소프트 공사 : 나는이 프로그램을 실행하면, 예를 들어 "cmd.exe를"을 위해, 당신은 CMD 창을 열 때 당신이 얻을 실제 출력을 반환합니다. 판권 소유.

적어도 코드는 부분적으로 작동합니다. 그러나 그것은 단지 "cmd /c C:\\test.bat" (test.bat가 유효한 배치 파일 임)을 사용할 때 어떤 출력도 제공하지 않습니다.

이것은 자바 코드입니다. 그게 뭐가 잘못 됐어?

 import java.io.BufferedReader; 
    import java.io.BufferedWriter; 
    import java.io.IOException; 
    import java.io.InputStream; 
    import java.io.InputStreamReader; 
    import java.io.OutputStream; 
    import java.io.OutputStreamWriter; 

    public class Test { 

     private static BufferedReader bufIn; 
     private static BufferedWriter printOut; 
     private static Process p; 

     public static void main(String[] args) throws IOException { 

      Runtime rt = Runtime.getRuntime() ; 

      p = rt.exec("cmd.exe /c C:\\test.bat"); 
      InputStream in = p.getInputStream() ; 
      OutputStream out = p.getOutputStream(); 

      bufIn = new BufferedReader(new InputStreamReader(in)); 
      printOut = new BufferedWriter(new OutputStreamWriter(out)); 

      int ch = 0; 
      ch = bufIn.read(); 

      while (ch != 0) 
      { 
       System.out.print((char) ch); 
       ch = bufIn.read(); 
      } 

      //send a command to 

      printOut.write("209"); 
      printOut.flush(); 

      while (ch != 0) 
      { 
       System.out.print((char) ch); 
       ch = bufIn.read(); 
      } 



    //p.destroy() ; 

    } 


} 

나는 점점해야합니다

Please enter a number: 
Number was 209 

편집 : 그것은 분명히 내의 readLine에 갇히지 않았기 때문에 나는 코드를 편집 어쨌든 더 라인 :

없었다 동안 , 나는 아직도 문제가있다. 내가 갖는 :

Enter a number: 

및 아무것도 거의 출력 스트림이 전혀 작동하지 않는 것처럼.

답변

0

대신 PrintWriter를 사용하는, BufferedWriter의에 싸여하는 OutputStreamWriter를 시도 :

printOut = new BufferedWriter(new OutputStreamWriter(out)); 

은 분명히 당신은뿐만 아니라 BufferedWriter의에 printOut을 변경해야합니다.

그것은 또한 당신이 플러싱하고 나에게 잘못된 순서로 인쇄, 내가 할 것 같습니다

측면 지점으로
printOut.println("209"); 
printOut.flush(); 

, 당신은 단지 read()보다는 BufferedReader로에 readLine()을 사용할 수 있습니다!

+0

감사합니다. 지금 사용해 보겠습니다. – David

+0

질문을 편집했습니다. – David

+0

@David 쓰기를 사용해야합니다 - 명령 다음에 개행 문자를 추가 했습니까? printOut.writer ("209 \ n"); ' – berry120

관련 문제