[Java] 시스템 command 실행하기, Runtime.getRuntime.exec()

0_0ni·2022년 12월 16일

Runtime.getRuntime().exec("시스템 명령어");

윈도우즈, 리눅스, 유닉스 등의 시스템 명령어를 java를 통해 실행한 후 그 결과값 받아오기

Runtime.exec() 으로 명령어 호출시 그 결과를 Process 객체로 리턴 받을 수 있음.
Process로부터 InputStreamReader를 가져와 문자열을 읽는다.

예제

try {
	Process p = Runtime.getRuntime().exec("시스템 명령어");
    BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line = null;
    
    while((line = br.readLine()) != null) {
    	System.out.println(line);
    }
} catch (Exception e) {
	System.out.println(e);
}

외부 프로그램 실행하면서 해당 프로그램에 파라미터를 전달할 때는 배열로 전달

try {
	String[] cmdAttay = {"notepad.exe", "test.txt"}; //실행할 프로그램과 전달할 인수를 문자열 배열로 만든다.
    Runtime.getRuntime().exec(cmdArray);
} catch (Exception e) {
	System.out.println(e);
}

실 적용 예제

public void excute (String command, StringBuilder worklogs, StringBuilder errLogs) throws IOException {
	
    log.info("[excute] command : " + command);
    
    try {
    	Process = Runtime.getRuntime().exec(command);
        
        BufferedReader bufferedReader;
        InputStream inputStream = process.getInputStream();
        InputStreamReader streamReader = new InputStreamReader(inputStream);
        bufferedReader = new BufferedReader(streamReader);
        
        String line;
        
        while ((line = bufferedReader.readLine()) != null) {
        	log.info(line);
        }
        worklogs.append(process.getInputStream()).append("\n");
        
        process.waitFor();
    } catch (Exception e) {
    	errLogs.append(command).append(" => execute fail.");
        e.printStackTrace();
    }
}

참고: https://roadrunner.tistory.com/214, https://haenny.tistory.com/266

0개의 댓글