자바로 외부 프로그램 실행 시키는 방법중에 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를 통하여 웹 브라우저 실행 후 네이버로 이동된다.
'스킬(skills) > 자바(Java)' 카테고리의 다른 글
JDBC 와 DBCP 차이 (0) | 2013.12.18 |
---|---|
Cannot create JDBC driver of class '' for connect URL 'null' (0) | 2013.12.18 |
mutable 과 immutable 객체 (0) | 2013.12.11 |
인자 값과 매개 변수의 차이점 (4) | 2013.09.27 |
Garbage Collector 개념 (0) | 2013.07.15 |