2013-05-26 5 views
3

Java 응용 프로그램에서 명령 프롬프트 (cmd.exe)를 열고 명령 프롬프트를 표시하지 않고 명령을 입력/실행하도록하는 방법이 있는지 알고 싶습니다.명령 프롬프트에서 명령을 실행하는 Java 응용 프로그램

누구든지이 작업을 수행 할 수있는 샘플 응용 프로그램이나 코드를 알고 있다면 답변을 얻으실 수 있습니다!

+2

원하는대로 명령 프롬프트를 엽니 다. 가장 도전적으로 명령을 실행하십시오. [ProcessBuilder] (http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html)를 확인하십시오. – MadProgrammer

답변

7

외부 프로그램을 실행하고 통신하는 데 java.lang.ProcessBuilder 및 java.lang.Process 클래스를 사용할 수 있습니다. java.lang.ProcessBuilder 클래스의 인스턴스를 사용하여 외부 프로그램을 실행하고 java.lang.Process의 서브 클래스 인스턴스를 리턴 할 수 있습니다. Process 클래스는, 프로세스로부터의 입력의 실행, 프로세스에의 출력의 실행, 프로세스의 완료를 기다리는 것, 프로세스의 종료 상태의 체크, 및 프로세스의 파기 (종료)를위한 메소드를 제공합니다.

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

     String[] command = {"CMD", "/C", "dir"}; 
     ProcessBuilder probuilder = new ProcessBuilder(command); 
     //You can set up your work directory 
     probuilder.directory(new File("c:\\xyzwsdemo")); 

     Process process = probuilder.start(); 

     //Read out dir output 
     InputStream is = process.getInputStream(); 
     InputStreamReader isr = new InputStreamReader(is); 
     BufferedReader br = new BufferedReader(isr); 
     String line; 
     System.out.printf("Output of running %s is:\n", 
       Arrays.toString(command)); 
     while ((line = br.readLine()) != null) { 
      System.out.println(line); 
     } 

     //Wait to get exit value 
     try { 
      int exitValue = process.waitFor(); 
      System.out.println("\n\nExit Value is " + exitValue); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 
+0

답장을 보내 주셔서 감사합니다. 지금 당장 시도하고 있습니다. 작업 디렉토리에 대해 매우 도움이됩니다. – Mdlc

+0

코드가 작동하지만 정확히 원하는대로 작동하지 않습니다. 이후에 명령을 실행할 수 있기를 바랍니다. – Mdlc

+0

cmd.exe에 두 번째 인수로 "/ C"를 넣어야하는 이유는 무엇입니까? – doughgle

2

Runtime.exec 메서드를 사용할 수 있습니다. 예를 들어, "ipconfig를"명령을 실행하고 결과

 Process p = Runtime.getRuntime().exec("ipconfig"); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(
       p.getInputStream())); 
     String readline; 
     while ((readline = reader.readLine()) != null) { 
      System.out.println(readline); 
     } 

또는 MadProgrammer의 의견에 따라 인쇄됩니다 다음 코드는 자바를 사용하여 프로세스를 실행하는 코드 아래 ProcessBuilder

ProcessBuilder pb = new ProcessBuilder("ipconfig"); 
    Process p = pb.start(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(
       p.getInputStream())); 
     String readline; 
     while ((readline = reader.readLine()) != null) { 
      System.out.println(readline); 
     } 
+0

ProcessBuilder를 사용하고 직접 투표하십시오.) – MadProgrammer

+0

고맙습니다. 그것을 시험해 보겠습니다. – Mdlc

+0

@MadProgrammer .. 너무 덧붙였다.하지만 processbuilder가 runtime.exec보다 유리한 점은 무엇입니까? 내 무지 미안하다. – stinepike

3

사용을 사용할 수 있습니다.

final List<String> commands = new ArrayList<String>();     
    commands.add("cmd"); 
    commands.add(input2); // second commandline argument 
    commands.add(input3);// third commandline agrument 
    ProcessBuilder pb = new ProcessBuilder(commands); 
2

셸 내부에서 실행해야하는지 (cmd.exe) 또는 일반적으로 셸에서 실행할 프로그램을 실행하는지에 따라 달라집니다.

전자는 적절한 Java API를 사용하여 cmd -c <string>을 호출해야합니다.

후자의 경우 Java API를 사용하여 직접 프로세스를 호출 할 수 있습니다.

중요 : 그러나 Java Process API에는 많은 함정이 있습니다. 을 사용하고 java.lang.Process/ProcessBuilder을 사용합니다. 문제를 확인하려면 this link을 참조하십시오.

더 나은 해결 방법은 이러한 모든 문제를 해결하는 Apache Commons Exec library을 사용하는 것입니다.

+1

나는 여기에 동의한다. [여기] (http://www.javaworld.com/jw-12-2000/jw-1229-traps.html)는'Runtime'이나'ProcessBuilder'를 사용하지 않는 이유에 대한 또 하나의 좋은 기사이다. . +1 –

관련 문제