비슷한 스레드가 있다는 것을 알고 있으며, 모두 읽었습니다. 그러나 그들 중 누구도 어떤 도움도받지 못했습니다.자바의 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:
및 아무것도 거의 출력 스트림이 전혀 작동하지 않는 것처럼.
감사합니다. 지금 사용해 보겠습니다. – David
질문을 편집했습니다. – David
@David 쓰기를 사용해야합니다 - 명령 다음에 개행 문자를 추가 했습니까? printOut.writer ("209 \ n"); ' – berry120