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


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();
윈도우 메모장 실행:

출처 : Tong - Developer님의 ▒ Java통

 public void R_exec() {
  try {
   String R_file = "C:\\source\\pvrc_java\\file\\test.R";
   String log_file = "C:\\source\\pvrc_java\\file\\test.log";
   Process p = Runtime.getRuntime().exec(String.format("R.exe CMD BATCH %s %s", R_file, log_file));
   InputStream is = p.getInputStream();
   BufferedReader br = new BufferedReader( new InputStreamReader( is ) ) ;
   while( true ) {
    String str = br.readLine() ;
    if( str == null || str.equals( "" ) ) break ;
    System.out.println( str ) ;
    System.out.println("testtest");
   }

   System.out.println(p);
   try {
    p.waitFor();
   } catch (InterruptedException e) {
    e.printStackTrace();
   } finally {
    p.destroy();
   }
   
  } catch (IOException e) {
   System.out.println(e);
  }
 }

'Technology > Programming' 카테고리의 다른 글

HTML / HTML5  (0) 2010.01.04
Javascript / Javascript document  (0) 2009.12.11
JAVA / 파일처리  (0) 2009.12.01
Python / 날짜 계산하기  (0) 2009.11.07
Javascript / 날짜 정규표현식  (0) 2009.10.30

+ Recent posts