Java로 외부 프로그램 실행 ( ProcessBuilder 사용)



 

자바로 외부 프로그램 실행 시키는 방법중에 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();


경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

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

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를 통하여 웹 브라우저 실행 후 네이버로 이동된다.


[출처] http://www.javapractices.com/topic/TopicAction.do?Id=82




본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
22 Command Prompt Shell Interface in Java 졸리운_곰 2015.07.12 310
21 java console 졸리운_곰 2015.07.05 223
20 Java Console and File Input/Output Cheat Sheet 졸리운_곰 2015.07.05 249
19 Demonstrates standard I/O redirection 졸리운_곰 2015.07.05 232
» Java로 외부 프로그램 실행 ( ProcessBuilder 사용) 졸리운_곰 2015.03.17 1175
17 Java Clipboard 자바 클립보드 복사/붙여넣기 졸리운_곰 2015.03.17 2214
16 Java Inner class 자바 중첩(내부)클래스 졸리운_곰 2015.03.03 887
15 IzPack으로 GUI 설치 프로그램 만들기 file 졸리운_곰 2015.02.15 638
14 [Java],[AWT],[Layout],[AWT Layout], file 졸리운_곰 2015.02.13 370
13 [Java],[AWT],[SWING], Java GUI file 졸리운_곰 2015.02.13 922
12 [Java][AWT 개요] file 졸리운_곰 2015.02.13 464
11 javac 로 컴파일 시 유니코드(utf-8) 한글 소스 코드 컴파일 문제 졸리운_곰 2015.02.02 1134
10 파일 존재 여부 판단, 디렉토리 있는지 확인 함수; File Directory Exist 졸리운_곰 2014.03.03 1215
9 Java Static 변수 졸리운_곰 2014.01.28 1102
8 Properties 클래스 사용하기. 졸리운_곰 2014.01.28 1026
7 Java => Thread 졸리운_곰 2014.01.28 835
6 Java 세마포어(Semaphore) 가을의 곰을... 2013.12.11 2517
5 Java Thread 제어 (Thread Pool) 가을의 곰을... 2013.12.11 975
4 Java Delay (지연실행) 루틴 가을의 곰을... 2013.11.20 1364
3 Java Runtime시 Memory monitoring 가을의 곰을... 2013.11.19 875
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED