[JAVA] ProcessBuilder 사용방법

[JAVA] ProcessBuilder 사용방법

자바에서 ProcessBuilder 로 특정 프로그램을 강제 실행할 수 있다.

아래 코드는 [시작] – [실행] 창에 “iexplore http://en.wikipedia.org/” 라고 입력했을 때의 결과와 같다.

    // 인터넷 익스플로러로 영문 위키피디아 사이트 접속하기
    try {
        ArrayList<String> list = new ArrayList();
        list.add(“C:\\Program Files\\Internet Explorer\\iexplore.exe”);
        list.add(http://en.wikipedia.org/);
            
        ProcessBuilder builder = new ProcessBuilder(list);
        builder.start();
    } catch (Exception e) {
        e.printStackTrace();
    }

ProcessBuilder 는 명령의 결과값도 리턴받을 수 있다.

예를 들어 아래 예제는 cmd 에서 dir 명령어를 한 결과를 가져온다.

        ProcessBuilder processBuilder = null;
        Process process = null;
        
        InputStreamReader inputReader = null;
        BufferedReader bufferedReader = null;
        
        ArrayList<String> valueList = null;
        
        try {
            processBuilder = new ProcessBuilder();
            valueList = new ArrayList<String>();
            valueList.add(“cmd”);
            valueList.add(“/C”);
            valueList.add(“dir”);
            
            // 특정 위치에서 실행 (dir 명령어를 특정 폴더에서 수행하고 싶을 경우)
            // processBuilder.directory(new File(“c:\\test”));
            
            processBuilder.redirectErrorStream(true);
            processBuilder.command(valueList);
            process = processBuilder.start();
            
            inputReader = new InputStreamReader(process.getInputStream(), “MS949”);
            bufferedReader = new BufferedReader(inputReader);
            
            String line = “”;
            while ((line = bufferedReader.readLine()) != null) {
                if (line.trim().length() == 0) {
                    continue;
                }
                
                System.out.println(line);
            }
            
            int resultValue = process.exitValue();
            System.out.println(“resultValue : “ + resultValue);
        
        } catch (Exception e) {
            e.printStackTrace();
            
        } finally {
            try {
                if (inputReader != null) {
                    inputReader.close();
                }
            } catch (Exception e) {
            } finally {
                inputReader = null;
            }
            
            try {
                if (bufferedReader != null) {
                    bufferedReader.close();
                }
            } catch (Exception e) {
            } finally {
                bufferedReader = null;
            }
            
            try {
                if (process != null) {
                    process.destroy();
                }
            } catch (Exception e) {
            } finally {
                process = null;
            }
        }

여기서 processBuilder.directory() 부분은 검색해도 잘 안나오는 내용인데, 특정 폴더 위치에서 프로세스 빌더를 실행하고 싶을 때 사용하면 된다(프로세스 빌더의 작업 디렉토리 지정).