[Java] 윈도우 cmd 명령어 실행 : Java로 실행파일 실행시키기 응용
[Java] 윈도우 cmd 명령어 실행 : Java로 실행파일 실행시키기 응용
1. Java에서 cmd 명령어 실행
Java의 Runtime 클래스를 이용하여 cmd 명령어를 실행할 수 있다.
Runtime.getRuntime().exec("cmd /c " + "cmd명령어");
2. cmd 실행 결과 받기
Runtime.exec() 로 명령어를 호출하면 그 결과가 Process 객체로 리턴받을 수 있다.
다음과 같이 Process 객체로부터 결과를 읽을 수 있다.
Process로부터 InputStreamReader를 가져와 문자열을 읽는다.
String cmd = "cmd 명령어";
Process p = Runtime.getRuntime().exec("cmd /c " + cmd);
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String l = null;
StringBuffer sb = new StringBuffer();
sb.append(cmd);
while ((l = r.readLine()) != null) {
sb.append(l);
sb.append("\n");
}
3. 응용 : VNC Viewer 실행
① 실행 버튼을 클릭
② 프로젝트 내 실행파일 실행
- VNC 실행파일 경로 : webapp/resource/exe/vnc-viewer.exe
실행파일이 필요한 분들은 다운로드 받으세요
html & javascript
<button type="button">실행</button>
<script>
$("button").on("click", function() {
$.ajax({
url: "${ctx}/exeVnc.do", // 컨트롤러 매핑주소
type: 'POST',
// data: params, // 넘길 파라미터 있는 경우 설정
dataType : 'json',
contentType : 'application/x-www-form-urlencoded; charset=UTF-8',
async: true,
success: function(returnData){
// 성공코드
}
});
});
</script>
Java (Controller)
@RequestMapping(value="/exeVnc.do", method=RequestMethod.POST, produces="text/plain;charset=UTF-8")
@ResponseBody
public String execution(HttpServletRequest request, HttpServletResponse response) {
try {
// webapp resource 경로 가져오기
String path = request.getServletContext().getRealPath("resource/exe/vncviewer.exe");
Process p = Runtime.getRuntime().exec("cmd /c " + path);
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String l = null;
StringBuffer sb = new StringBuffer();
sb.append(cmd);
while ((l = r.readLine()) != null) {
sb.append(l);
sb.append("\n");
}
} catch (IOException e) {
e.printStackTrace();
}
return "성공";
}
실행화면
만약, VNC Viewer 실행 시 Server 매개변수를 세팅한 상태로 실행시키고 싶은 경우에는 cmd 명령어 부분에 서버 IP와 PORT를 같이 넘기면 된다.
그러면 실행했을 때 아래과 같이 패스워드 화면이 바로 표출된다.
Process p = Runtime.getRuntime().exec("cmd /c '실행파일경로' '서버IP:포트'");
// 예시
Process p = Runtime.getRuntime().exec("cmd /c C:\ULSAN_BIS\VNC\vnc-viewer.exe 192.0.0.1:5900");
![](https://blog.kakaocdn.net/dn/ZmMCN/btrRcNCGDUn/jiVsMsfBksNsid5h8MleaK/img.png)
여기서 주의해야할 점은 구동되고 있는 서버와 이벤트를 실행시키려는 클라이언트가 같은 서버(같은 PC)내에 있는 경우 즉, 로컬에서의 경우이다.
![](https://blog.kakaocdn.net/dn/bNzFAf/btrRcFkATwj/vG4JjknEQqkwP7dpx6EkjK/img.png)
만약 자바 프로젝트는 특정 서버에 배포를 하고, 다른 PC에서 해당 페이지를 접속하여 이벤트를 하게된다면 실행파일은 사용자의 화면에 표출되는 것이 아닌 서버내에서 실행이 되버린다는 것을 주의하자.
![](https://blog.kakaocdn.net/dn/dRZjau/btrRcPtG67Q/5VEICwg3sNaswkwnxXe18K/img.png)
'JAVA > Java' 카테고리의 다른 글
[Java] StringTokenizer Class 사용 및 Split 비교 (0) | 2022.12.12 |
---|---|
[Java] 스트림 (Stream) 타입별 변환 (0) | 2022.12.12 |
[Java] POI 엑셀 다운로드 시 Invalid char (/) found at index (6) in sheet name 에러 (0) | 2022.12.12 |
[Java] Lombok 사용 시 @Data compileJava 오류 (0) | 2022.11.15 |
[Java] FTP 서버로 파일 전송(업로드) 방법 및 다계층 디렉토리 만들기 (0) | 2022.11.15 |
[Java] POI 암호걸린 EXCEL 풀고 데이터 읽어오기 (0) | 2022.11.15 |
[Java] POI Excel CellStyle 버전 업 후 Deprecated 된 속성 알아보기 (0) | 2022.11.15 |
[Java] 추상클래스와 인터페이스 차이 (0) | 2022.11.15 |