首頁 > Java > java教程 > 主體

Runtime.exec() 與 ProcessBuilder.start():什麼時候該使用它們?

Susan Sarandon
發布: 2024-11-13 15:22:02
原創
756 人瀏覽過

Runtime.exec() vs. ProcessBuilder.start(): When Should I Use Each?

ProcessBuilder 與Runtime.exec():了解差異

當嘗試從Java 執行外部命令時,開發人員經常會遇到差異Runtime.exec() 與ProcessBuilder.start() 之間的行為。

Runtime.exec():

使用 Runtime.getRuntime().exec() 涉及一個兩步驟過程:標記化和執行。輸入字串在執行之前會被解析並轉換為參數數組。

ProcessBuilder:

相較之下,ProcessBuilder 的操作方式有所不同。它的建構子接受一個可變參數數組或字串列表,其中每個字串代表一個單獨的參數。然後將參數組合成單一字串並傳遞給作業系統。

對執行的影響:

參數處理中的這種差異可能會影響指令。例如,如果指令包含空格,Runtime.exec() 將自動處理標記化,而 ProcessBuilder 需要明確建立參數陣列或清單。

範例:

考慮以下帶有空格的指令:

"C:\DoStuff.exe -arg1 -arg2"
登入後複製

使用Runtime.exec()

Process p = Runtime.getRuntime().exec("C:\DoStuff.exe -arg1 -arg2");
登入後複製
使用Runtime.exec()

:

在這種情況下,命令將如預期執行,exitValue將為 0。

Process p = (new ProcessBuilder("C:\DoStuff.exe -arg1 -arg2")).start();
登入後複製
使用 ProcessBuilder

:

Process p = (new ProcessBuilder("C:\DoStuff.exe", "-arg1", "-arg2")).start();
登入後複製

但是,直接使用 ProcessBuilder 而不進行標記化將導致錯誤或意外行為,返回exitValue 為 1001。要修正此問題,您必須明確建立參數陣列:

摘要:

一般來說,在使用ProcessBuilder 時,必須提供將參數作為單獨的列表或數組,明確指示每個單獨的參數。此附加步驟可確保正確解析參數並按預期執行外部命令。

以上是Runtime.exec() 與 ProcessBuilder.start():什麼時候該使用它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板