2012-11-08 2 views
0

추가 명령으로 cmd.exe를 호출하고 java를 사용하여 생성 된 출력을 수집하는 프로그램은 거의 작성하지 않았습니다. 다음은 샘플 프로그램입니다.인수없이 java에서 cmd.exe 호출

public class LoadShell { 
    public static void main(String[] args) throws Exception { 
    //Line1 
     String [] command ={"cmd.exe","/c","dir"};  
    ProcessBuilder probuilder = new ProcessBuilder(command);    
     Process process = probuilder.start();  
     InputStream inputstream1 = process.getInputStream();   
     InputStreamReader inputstreamreader1 = new InputStreamReader(inputstream1); 
     BufferedReader bufferedreader = new BufferedReader(inputstreamreader1);  
     String line=""; 
     while ((line = bufferedreader.readLine()) != null) { 
      System.out.println(line); 
     } 

    } 
} 

이 프로그램은 예상대로 작동합니다. 이제는 더 간단한 요구 사항이 있습니다. 나는 인수없이 cmd.exe를 호출하고 출력을 String으로 수집하려고합니다. 일부 프로젝트 특정 목적을 위해 프로세스 개체 참조 및 문자열을 다른 메서드로 보내려고하기 때문입니다. 그래서

public class LoadShell { 
    public static void main(String[] args) throws Exception { 
      //Line1 
     String [] command ={"cmd.exe"}; 
     ProcessBuilder probuilder = new ProcessBuilder(command);    
      Process process = probuilder.start(); 
      InputStream inputstream1 = process.getInputStream();   
      InputStreamReader inputstreamreader1 = new InputStreamReader(inputstream1); 
      BufferedReader bufferedreader = new BufferedReader(inputstreamreader1); 
      int intch;  
     String line=""; 
     while ((line = bufferedreader.readLine()) != null) { 
      System.out.println(line); 
     } 

     } 
} 

below--하지만이 경우처럼 1 호선에서 내 코드를 수정 한의 readLine 방법은 printing--

마이크로 소프트 윈도우 [버전 6.1.7601] 저작권 (C) 후 무기한 중단 2009 Microsoft Corporation. 판권 소유.

while ((intch = bufferedreader.read()) != -1) { 
      int ch = (char) intch; 
      System.out.println(ch); 
      } 

을하지만도에 해당하는 바이트를 읽은 후 걸려 읽기 - -

Microsoft Windows [Version 6.1.7601] 
Copyright (c) 2009 Microsoft Corporation. All rights reserved. 

이 하나가되어 다음과 같이

그래서 내가 대신 readlineBufferedReader의 읽기 사용 시도 방법은 내 프로그램이 멈추지 않고 아래에 완전한 출력을 얻을 수 있습니다 -

Microsoft Windows [Version 6.1.7601] 
Copyright (c) 2009 Microsoft Corporation. All rights reserved. 

C:\Users\devshankhasharm> 

어떤 아이디어라도 감사하겠습니다.

+0

cmd.exe로만 호출하면 명령 창이 열리지 않습니다. 콘솔에서 부분 출력 만 제공하고 무기한 중단됩니다. – user496934

+0

예, 실제로 프로그램을 실행하여 볼 수 있습니다. – user496934

답변

0

아마도 /c 플래그가 없으므로 쉘 창을 열면 외부 프로세스가 명령을 실행하기 위해 대기하는 프롬프트 인 C:\>에 대기하고 있기 때문일 수 있습니다. 당신은 아무것도 보내지 않으므로, 당신이 그것을 죽일 때까지 거기에 앉을 것입니다.