컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Thursday, September 21, 2006

자바/Java] 외부 프로그램 실행, 외부 명령어 호출 - exec(), ProcessBuilder


system() 함수 하나로 외부 프로그램 실행이 가능한 Perl이나 C언어와는 달리, 자바는 외부 프로그램 실행이 좀 까다롭습니다. 외부 프로그램 자체의 실행 화면이 나오지 않고, 실행 화면의 결과를 캡처하여, 수동으로 화면에 다시 출력해 주어야 했습니다.


자바에서는 exec() 라는 메소드로 외부 프로그램을 실행합니다.
최신 버전인 자바 1.5 (= 자바 5.0)에서는 ProcessBuilder 클래스의 start() 메소드로 실행하는 새로운 방법이 있습니다.


자바 예제: 외부 프로그램/외부 명령 실행


Foo.java
import java.io.*;

public class Foo {
  public static void main(String args[]) {
    String s;

  try {
    /*  자바 1.4 이하에서는 이렇게
    Runtime oRuntime = Runtime.getRuntime();
    Process oProcess = oRuntime.exec("cmd /c dir /?");
    */

    // 자바 1.5 이상에서는 이렇게 1줄로
    Process oProcess = new ProcessBuilder("cmd", "/c", "dir", "/?").start();

    // 외부 프로그램 출력 읽기
    BufferedReader stdOut   = new BufferedReader(new InputStreamReader(oProcess.getInputStream()));
    BufferedReader stdError = new BufferedReader(new InputStreamReader(oProcess.getErrorStream()));

    // "표준 출력"과 "표준 에러 출력"을 출력
    while ((s =   stdOut.readLine()) != null) System.out.println(s);
    while ((s = stdError.readLine()) != null) System.err.println(s);

    // 외부 프로그램 반환값 출력 (이 부분은 필수가 아님)
    System.out.println("Exit Code: " + oProcess.exitValue());
    System.exit(oProcess.exitValue()); // 외부 프로그램의 반환값을, 이 자바 프로그램 자체의 반환값으로 삼기

  } catch (IOException e) { // 에러 처리
      System.err.println("에러! 외부 명령 실행에 실패했습니다.\n" + e.getMessage());
      System.exit(-1);
    }
  }
}



Process oProcess = new ProcessBuilder("cmd", "/c", "dir").start();
윈도우 도스창에서 dir 명령 실행. dir 은 cmd.exe 속에 내장된 내부 명령어이기에 이렇게 합니다. 내부 명령어를 그냥 실행시키면 안됩니다.


Process oProcess = new ProcessBuilder("notepad.exe").start();
윈도우 메모장 실행:



☞ 자바

0 Comments:

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top