>Java >java지도 시간 >Java에서 여러 명령줄 명령을 올바르게 실행하는 방법은 무엇입니까?

Java에서 여러 명령줄 명령을 올바르게 실행하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-30 21:33:15639검색

How to Properly Execute Multiple Command-Line Commands in Java?

Java를 통해 명령줄 인수를 실행하는 방법

질문:

어떻게 실행합니까? Java를 통한 명령줄 인수? 예를 들어 다음 코드를 생각해 보세요.

// Execute command
String command = "cmd /c start cmd.exe";
Process child = Runtime.getRuntime().exec(command);

// Get output stream to write from it
OutputStream out = child.getOutputStream();

out.write("cd C:/ /r/n".getBytes());
out.flush();
out.write("dir /r/n".getBytes());
out.close();

이 코드는 명령줄을 열지만 "cd" 또는 "dir" 명령은 실행하지 않습니다.

답변:

Windows에서 여러 명령에 단일 프로세스를 재사용하려면 다음을 따르세요. 단계:

  1. 명령 이름(이 경우 "cmd")을 사용하여 문자열 배열을 생성합니다.
  2. Runtime.getRuntime().exec(명령)을 사용하여 명령을 실행합니다.
  3. 오류 및 출력 스트림을 처리하기 위해 스레드를 시작합니다.
  4. 출력에서 PrintWriter를 엽니다. stream.
  5. 원하는 명령을 PrintWriter에 씁니다.
  6. PrintWriter를 닫습니다.
  7. p.waitFor()로 프로세스가 완료될 때까지 기다립니다.

다음은 예:

String[] command = {"cmd"};
Process p = Runtime.getRuntime().exec(command);
new Thread(new SyncPipe(p.getErrorStream(), System.err)).start();
new Thread(new SyncPipe(p.getInputStream(), System.out)).start();
PrintWriter stdin = new PrintWriter(p.getOutputStream());
stdin.println("dir c:\ /A /Q");
stdin.close();
int returnCode = p.waitFor();
System.out.println("Return code = " + returnCode);

SyncPipe 클래스:

class SyncPipe implements Runnable {
    public SyncPipe(InputStream istrm, OutputStream ostrm) {
        istrm_ = istrm;
        ostrm_ = ostrm;
    }

    public void run() {
        try {
            final byte[] buffer = new byte[1024];
            for (int length = 0; (length = istrm_.read(buffer)) != -1; ) {
                ostrm_.write(buffer, 0, length);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private final OutputStream ostrm_;
    private final InputStream istrm_;
}

위 내용은 Java에서 여러 명령줄 명령을 올바르게 실행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.