자바는 외부 프로그램을 실행 시 출력 내용을 바로 확인 할 수 없고 버퍼에 저장 후 출력하는 방식으로 확인 해야 한다
JDK 1.4이하에는 exec()메소드를 이용해 외부 프로그램을 실행 할 수 있고
JDK1.5 이상에서는 ProcessBuilder 객체를 이용하여 외부 프로그램을 실행 시킬 수 있다.
Process 객체 생성 후 실행 커맨드를 다음과 같이 인자값으로 넣어 주어야 한다.
Process process=nw 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()));
//표준 출력 상태를 출력
whle(str=stdOut.readLine())!=null){
System.out.println(str);
}
InputStreamReader 객체를 통하여 위 process 객체에 출력된 스트림을 입력 받아 버퍼에 저장 후
while 문을 통하여 버퍼에 저장된 내용을 펴시하여 준다.
package ProcessBuilder;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class opening {
public static void main(String[] args){
String addr="http://www.daum.net";
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()));
//표준 출력 상태를 출력afd
while((str=stdOut.readLine())!=null){
System.out.println(str);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
이렇게 하면 rundll32를 통하여 웹 브라우저 실행 후 네이버로 이동된다.
'Java' 카테고리의 다른 글
encapsulating (0) | 2015.01.13 |
---|---|
building a Stack structure (0) | 2015.01.13 |
UrlFrame, getting the page source and save as a txt file (0) | 2015.01.06 |
URL class, figuring the page source (0) | 2015.01.06 |
CopyFile getting a new name from the console (0) | 2015.01.03 |