2012-01-17 3 views
0

다음과 같은 샘플 Java 코드가 있습니다.Windows에서 JAVA로 CMD 파일을 올바르게 호출하는 방법은 무엇입니까?

String testEfdDirectoryPath="D:\\test"; 
    String efdExecutable = "test.cmd"; 
    File executableFile = new File(testEfdDirectoryPath, efdExecutable); 
    ProcessBuilder pb=new ProcessBuilder(); 
    $$pb.command("cmd.exe","/C",executableFile.toString());$$ 
    pb.directory(new File(testEfdDirectoryPath)); 
    Process p=pb.start(); 
    int code=p.waitFor(); 
    System.out.print(code); 

실제로 다른 java 응용 프로그램에 대한 호출이 있습니다. 출력을 리디렉션하기 위해 $$ 표시된 행을 다음과 같이 변경하지 않으면 다른 Java 응용 프로그램을 시작할 수 없습니다.

pb.command("cmd.exe","/C",executableFile.toString(),">output.txt"); 

의견이 있으십니까? 미리 감사드립니다. :)

답변

2

자식 프로세스가 많은 출력을 생성합니까 (몇 킬로바이트 이상)? 이 경우 해당 프로세스의 출력을 읽어야합니다. 당신은 시도해야합니다 :

  1. 프로세스의 stdin를 닫 프로세스를 시작
  2. , 그래서 pb.getOutputStream().close()
  3. 반복 pb.getInputStream() 읽고이 하나 개의 스레드에서 가능하다

오류 스트림, 또는 여러 스레드에서. 어쨌든 위의 설명을 키워드 목록으로 사용하고 신뢰할 수있는 예제 코드 단편을 검색해야합니다. 예를 들어, 이러한 일을 성공적으로 수행하는 오픈 소스 응용 프로그램에서 선호 할 수 있습니다.

http://commons.apache.org/exec/으로 문의하십시오.

+0

고마워, 롤랜드. 당신 말이 맞아요. 이 문제는 ProcessBuilder의 javadoc에 명시되어 있습니다. – Smartmarkey

0

Windows에서 스크립트를 직접 실행할 수 없습니다. .cmd 파일을 두 번 클릭하면 실제로 파일이 cmd.exe에 열립니다. 따라서 cmd.exe E:\\test\\test.cmd을 시도하십시오.

+0

죄송합니다. 명확하지 않습니다. 내 질문을 업데이트했습니다. – Smartmarkey

관련 문제