스킬(skills)/자바(Java)

자바로 외부 프로그램 실행시키기(ProcessBuilder)

후바스탱크 2013. 11. 29. 15:14

자바로 외부 프로그램 실행 시키는 방법중에 ProcessBuilder 에 대해서 간단하게 소개 하려고 한다.

자바에서는 외부 프로그램 실행 시 출력 내용을 바로 확인 할 수 없고 버퍼에 저장 후 출력하는 형식으로

확인 하여야 한다.


JDK 1.4 버전 이하에서는 exec() 메소드를 이용하여 외부 프로그램을 실행 시킬 수 있고

JDK 1.5 버전 이상에서는 ProcessBuilder 객체를 이용하여 외부 프로그램을 실행 시킬 수 있다.


Process 객체 생성 후 실행 할 커맨드를 다음과 같이 쪼개어 인자값으로 넣어 주어야 한다.

Process process = new ProcessBuilder("cmd", "dir", "/w").start();


위와같이 표현 한다면 cmd 커맨드 창을 실행 후 dir /w 명령어를 실행 한다는 의미 이다.


혹은 다음과 같이 배열을 이용하여 표현 할 수도 있다.

String[] cmd = new String[] {"cmd", "dir", "/w"};

Process process = new ProcessBuilder(cmd).start();


이렇게 실행 한 결과를 버퍼에 저장 후 표준 출력을 화면에 표시 하여야 하는데 다음과 같이 표현 할 수 있다.

BufferedReader stdOut = new BufferedReader( new InputStreamReader(process.getInputStream()) );

// 표준출력 상태를 출력
while( (str = stdOut.readLine()) != null ) {
    System.out.println(str);
}


InputStreamReader 객체를 통하여 위 process 객체에서 출력된 스트림을 입력 받아 버퍼에 저장 후

while 문을 통하여 버퍼에 저장 된 내용을 표시하여 주는 것이다.


하나의 예로 웹 브라우저를 띄운 후 원하는 페이지로 이동 하는것을 예를 든다면 다음과 같이 할 수 있다.

String addr = "http://www.naver.com";
Process process = null;
String[] cmd = new String[] {"rundll32", "url.dll", "FileProtocolHandler", addr};
String str = null;

try {

    // 프로세스 빌더를 통하여 외부 프로그램 실행
    process = new ProcessBuilder(cmd).start();

    // 외부 프로그램의 표준출력 상태 버퍼에 저장
    BufferedReader stdOut = new BufferedReader( new InputStreamReader(process.getInputStream()) );
   
    // 표준출력 상태를 출력
    while( (str = stdOut.readLine()) != null ) {
        System.out.println(str);
    }
   
} catch (IOException e) {
    e.printStackTrace();

}


이렇게 하면 rundll32를 통하여 웹 브라우저 실행 후 네이버로 이동된다.