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

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

Barbara Streisand
Barbara Streisand原創
2024-11-15 02:54:02823瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn