MENU

Java 외부 명령을 실행하여 세 가지 결과 얻기

목차

Java 외부 명령실행 3 개 (표준 출력, 에러 출력, 리턴 코드) 결과 얻기

Java 에서 명령이나 배치 쉘 등의 외부 실행 파일을 기동하는 샘플 프로그램을 소개합니다.
또한 외부 명령 실행과 동시에 메소드의 리턴 값으로표준 출력,,,오류 출력,,,리턴 코드를 가져옵니다.

일반적으로 Java에서 외부 명령을 시작하는 방법은 다음과 같이 할 수 있습니다.

Runtime r = Runtime.getRuntime();
r.exec("実行するコマンド名");

또한 시작된 외부 명령의 반환 값을 얻으려면,java.lang.ProcesswaitFor()을 실행합니다.

Process p = Runtime.getRuntime().exec("実行するコマンド名");
int ret = p.waitFor()

샘플 프로그램

/**
 * 外部コマンドを実行します。
 * またリタンーン値で、標準出力、エラー出力 、リターンコードを取得します。
 * 例:
 *     execCommand("notepad.exe");
 *
 * @see execCommand(String[] cmds)
 *    ※実行するコマンドに引数(パラメータ)がある場合は、
 *    以下を使用してください。
 * @param cmd 実行するコマンド
 * @return コマンド実行結果情報を保持するString配列
 *    配列[0] ⇒ 標準出力
 *    配列[1] ⇒ エラー出力
 *    配列[2] ⇒ リターンコード
 * @throws IOException 入出力エラーが発生した場合
 */
public static String[] execCommand(String cmd) throws IOException,
        InterruptedException {
    return execCommand(new String[] { cmd });
}
/**
 * 外部コマンドを引数(パラメータ)を指定して実行します。
 * またリタンーン値で、標準出力、エラー出力 、リターンコードを取得します。
 * 例:
 *     execCommand(new String[]{"notepad.exe","C:\test.txt"});
 *
 * Process.waitFor()を実行していますので、外部コマンドの実行が
 * 終了するまでこのメソッドは待機します。
 *
 * @see execCommand(String cmd)
 *    ※実行するコマンドに引数がない場合は簡易的にこちらを
 *      使用してください。
 * @param cmds 実行するコマンドと引数を含む配列
 * @return コマンド実行結果情報を保持するString配列
 *    配列[0] ⇒ 標準出力
 *    配列[1] ⇒ エラー出力
 *    配列[2] ⇒ リターンコード
 * @throws IOException 入出力エラーが発生した場合
 */
public static String[] execCommand(String[] cmds) throws IOException,
                                                    InterruptedException {
    String[] returns = new String[3];
    String LINE_SEPA = System.getProperty("line.separator");
    Runtime r = Runtime.getRuntime();
    Process p = r.exec(cmds);
    InputStream in = null;
    BufferedReader br = null;
    try {
        in = p.getInputStream();
        StringBuffer out = new StringBuffer();
        br = new BufferedReader(new InputStreamReader(in));
        String line;
        while ((line = br.readLine()) != null) {
            out.append(line + LINE_SEPA);
        }
        returns[0] = out.toString();
        br.close();
        in.close();
        in = p.getErrorStream();
        StringBuffer err = new StringBuffer();
        br = new BufferedReader(new InputStreamReader(in));
        while ((line = br.readLine()) != null) {
            err.append(line + LINE_SEPA);
        }
        returns[1] = err.toString();
        returns[2] = Integer.toString(p.waitFor());
        return returns;
    } finally {
        if (br != null) {
            br.close();
        }
        if (in != null) {
            in.close();
        }
    }
}

실행 결과

실행 예

public static void main(String[] args) {
    try {
	    System.out.println("1. 引数なしで実行。※helpコマンドを実行。");
	    String[]s = execCommand("help");
	    System.out.println(
	            "\n[標準出力]\n"+s[0].substring(0,200)+
	            "\n[エラー出力]\n"+s[1]+
	            "\n[リターンコード]\n"+s[2] + "\n\n");
	    
	    System.out.println("2. 引数を指定して実行。※helpコマンドの引数にdirを指定して実行。");
	    s = execCommand(new String[]{"help","dir"});
	    System.out.println(
	            "\n[標準出力]\n"+s[0].substring(0,200)+
	            "\n[エラー出力]\n"+s[1]+
	            "\n[リターンコード]\n"+s[2] + "\n\n");
	    
	    System.out.println("3. バッチファイルを実行。※さらにリターンコードを評価して処理を分岐する。");		    
	    s = execCommand("C:\\test.bat");
	    if (!s[2].equals("0")) {
	        System.out.println("\ntest.batは異常終了しています。[リターンコード]="+s[2]);
	    }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

출력 결과

1. 引数なしで実行。※helpコマンドを実行。
[標準出力]
特定のコマンドの詳細情報は、"HELP コマンド名" を入力してください
ASSOC    ファイル拡張子の関連付けを表示または変更します。
ATTRIB   ファイルの属性を表示または変更します。
BREAK    拡張 CTRL+C チェックを設定または解除します。
BCDEDIT  ブート データベースのプロパティを設定して起動時の読み込みを制御します。
CACLS    ファイル
[エラー出力]

[リターンコード]
1


2. 引数を指定して実行。※helpコマンドの引数にdirを指定して実行。
[標準出力]
ディレクトリ中のファイルとサブディレクトリを一覧表示します。

DIR [ドライブ:][パス][ファイル名] [/A[[:]属性]] [/B] [/C] [/D] [/L] [/N]
  [/O[[:]ソート順]] [/P] [/Q] [/R] [/S] [/T[[:]タイムフィールド]] [/W] [/X] [/4]

  [ドライブ:][パス][ファイル名]
           
[エラー出力]

[リターンコード]
1


3. バッチファイルを実行。※さらにリターンコードを評価して処理を分岐する。
test.batは異常終了しています。[リターンコード]=9
echo test.batが実行されました。
echo エラーが発生しています。
exit 9
  • URL을(를) 확인했습니다!
목차