> Java > java지도 시간 > 본문

ProcessBuilder와 Runtime.exec(): 언제 외부 명령을 실행하기 위해 어느 것을 사용해야 합니까?

Patricia Arquette
풀어 주다: 2024-11-17 04:49:03
원래의
916명이 탐색했습니다.

ProcessBuilder vs. Runtime.exec(): When to Use Which for Executing External Commands?

ProcessBuilder와 Runtime.exec()의 차이점 이해

Java 코드에서 외부 명령을 실행할 때 개발자는 종종 두 가지 일반적인 방법을 접하게 됩니다. Runtime.getRuntime().exec(...) 및 새 ProcessBuilder(...).start(). 이러한 방법은 유사해 보이지만 명령 실행에 영향을 미칠 수 있는 주요 차이점이 있습니다.

오버로딩 및 토큰화

Runtime.exec()는 단일 문자열과 토큰화를 모두 제공합니다. 배열 과부하. 단일 문자열 오버로드를 사용하는 경우 제공된 문자열은 인수 배열로 토큰화됩니다. 이 토큰화 동작은 ProcessBuilder에 적용되지 않습니다. ProcessBuilder 생성자는 각 문자열이 개별 인수를 나타낸다고 가정할 때 varargs 배열 또는 문자열 목록만 허용합니다.

명령 실행에 미치는 영향

예를 들어 이 차이점을 살펴보겠습니다. Windows에서 다음 Runtime.exec() 호출:

Runtime.getRuntime().exec("C:\DoStuff.exe -arg1 -arg2");
로그인 후 복사

은 "-arg1" 및 "-arg2" 인수를 사용하여 "DoStuff.exe" 프로그램을 실행합니다. 토큰화는 명령이 올바르게 구문 분석되도록 보장합니다.

반대로, "DoStuff.exe -arg1 -arg2"라는 프로그램이 C: 디렉터리에 존재하지 않는 한 다음 ProcessBuilder 호출은 실패합니다.

ProcessBuilder b = new ProcessBuilder("C:\DoStuff.exe -arg1 -arg2");
로그인 후 복사

ProcessBuilder를 사용하여 명령을 올바르게 실행하려면 인수를 별도로 제공해야 합니다.

ProcessBuilder b = new ProcessBuilder("C:\DoStuff.exe", "-arg1", "-arg2");
로그인 후 복사

또는 목록을 사용해야 합니다.

List<String> params = java.util.Arrays.asList("C:\DoStuff.exe", "-arg1", "-arg2");
ProcessBuilder b = new ProcessBuilder(params);
로그인 후 복사

오류 처리에 대한 의미

명령 토큰화의 차이는 오류 처리에 영향을 줄 수 있습니다. 예를 들어 ProcessBuilder가 지정된 프로그램을 찾지 못하면 예상되는 종료 값 0 대신 오류 코드 1001이 표시될 수 있습니다. Runtime.exec() 및 ProcessBuilder의 토큰화 동작을 이해하는 것은 이러한 오류를 디버깅하는 데 중요합니다.

위 내용은 ProcessBuilder와 Runtime.exec(): 언제 외부 명령을 실행하기 위해 어느 것을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿