Thursday, September 21, 2006
자바/Java] 외부 프로그램 실행, 외부 명령어 호출 - exec(), ProcessBuilder
프로그래밍 언어인 '자바'에 대한 게시물입니다.
system() 함수 하나로 외부 프로그램 실행이 가능한 Perl이나 C언어와는 달리, 자바는 외부 프로그램 실행이 좀 까다롭습니다. 외부 프로그램 자체의 실행 화면이 나오지 않고, 실행 화면의 결과를 캡처하여, 수동으로 화면에 다시 출력해 주어야 했습니다.
자바에서는 exec() 라는 메소드로 외부 프로그램을 실행합니다.
최신 버전인 자바 1.5 (= 자바 5.0)에서는 ProcessBuilder 클래스의 start() 메소드로 실행하는 새로운 방법이 있습니다.
Foo.java
Process oProcess = new ProcessBuilder("cmd", "/c", "dir").start();
윈도우 도스창에서 dir 명령 실행. dir 은 cmd.exe 속에 내장된 내부 명령어이기에 이렇게 합니다. 내부 명령어를 그냥 실행시키면 안됩니다.
Process oProcess = new ProcessBuilder("notepad.exe").start();
윈도우 메모장 실행:
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);
}
}
}
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();
윈도우 메모장 실행:
tag: java
자바 | Java
<< Home