首頁 > Java > java教程 > ProcessBuilder 與 Runtime.exec():為什麼它們在執行外部指令時表現不同?

ProcessBuilder 與 Runtime.exec():為什麼它們在執行外部指令時表現不同?

Barbara Streisand
發布: 2024-11-15 02:54:02
原創
854 人瀏覽過

ProcessBuilder vs Runtime.exec(): Why Do They Behave Differently When Executing External Commands?

ProcessBuilder 與Runtime.exec():分析差異

在Java 中執行外部命令時,可能會遇到Runtime 之間的差異。 getRuntime().exec(...) 和 new ProcessBuilder(...).start()。以下探討旨在闡明這些差異並提供實現一致行為的解決方案。

預設參數處理

兩種方法之間的一個關鍵區別在於它們的處理的論點。 Runtime.getRuntime().exec() 需要單一字串或字串陣列,而 ProcessBuilder 需要字串陣列或字串清單。當將 exec() 與單一字串一起使用時,它會在內部標記字串以建立參數數組。

ProcessBuilder 行為

在 ProcessBuilder 的情況下,傳遞參數作為數組或列表,其中每個元素代表一個參數。但是,如果字串未正確標記,則會形成單一參數,包括任何空格。這可能會導致意外行為,如提供的範例中命令未正確執行的情況。

解決方案

要使用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 與 Runtime.exec():為什麼它們在執行外部指令時表現不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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