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 중국어 웹사이트의 기타 관련 기사를 참조하세요!