반응형

Web System에서 윈도우의 도스명령어를 실행해야 하는경우가 있다.

 

예를들어, Database를 백업 또는 복구하는 경우에 이러한 기능이 매우 좋은 기능이다.

 

아래 소스를 보고 설명해 보자.

 

 

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Scanner;

public class DosCommandExecute {

 public static void main(String args[]) {

  try {
   Scanner scan = new Scanner(System.in);
   System.out.print("INSERT DOS COMMAND :");
   String command = scan.next();

 

   String cmd[] = new String[3];
   cmd[0] = "cmd.exe";
   cmd[1] = "/C";
   cmd[2] = command;


   Runtime runTime = Runtime.getRuntime();
   Process process = runTime.exec(cmd);

 

   InputStream is = process.getInputStream();
   InputStreamReader isr = new InputStreamReader(is);
   BufferedReader br = new BufferedReader(isr);


   String line;

   while ((line = br.readLine()) != null) {
    System.out.println(line);
   }

   int execTime = process.waitFor();
   System.out.println("exectiog time: " + execTime);
  } catch (Throwable t) {
   t.printStackTrace();
  }
 }

위 소스에 대해서 분석을 해보도록 하자.

 

우리가 입력하는 DOS명령어는 다음과 같은 형식이다.

 

cmd.exe /C (명령어)

 

/C는 다음과 같은 옵션이다.

(/C옵션)

/C      문자열이 지정한 명령어를 수행한 후에 종료합니다.

 

저 위의 명령어가 String 배열로 입력이 들어가는 것이다.

 

 

내부적으로 실행하는 방법은 Runtime Class를 이용하여 별도로 Thread를 이용하여 실행하는 방법이다.

 

원래 Java의 경우 Java 실행시 Runtime Class 실행하여 1개의 Thread를 생성한다, 내부적으로 Runtime Class를 하나 더 생성하여

 

도스명령어를 이용한 데이터를 가져온다.

 

이상이다. 만약 DB 백업 을 원하신다면 아래와 같이 데이터를 넣으면 쉽게 적용할 수있다.

 

 

   cmd[0] = "cmd.exe";
   cmd[1] = "/C";
   cmd[2] = "mysqldump -u root -papmsetup amt_db_oper > d:/견적서/하이루.sql"; 

 

그럼 깔끔하게 적용된다. 웹의 경우 Servlet에서 위와 같은 기능을 추가하게 된다면 많은 기능을 더 적용할 수 있을 것이다.

 

반응형

+ Recent posts