윈도우즈, 리눅스, 유닉스 등의 시스템 명령어를 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