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