Musimy przestrzenie między argumenty w linii poleceń, ponieważ poleceń trzeba wiedzieć, co jest pierwszym argumentem, który jest drugim i tak dalej. Jednak gdy używamy ProcessBuilder
, możemy przekazać do niego tablicę, więc nie musimy dodawać tych spacji, aby odróżnić argumenty. ProcessBuilder bezpośrednio przejdzie przez tablicę poleceń do exec
po sprawdzeniu. Na przykład,
private static final String JAVA_CMD = "java";
private static final String CP = "-cp";
private static final String CLASS_PATH = "../bin";
private static final String PROG = "yr12.m07.b.Test";
private static final String[] CMD_ARRAY = { JAVA_CMD, CP, CLASS_PATH, PROG };
ProcessBuilder processBuilder = new ProcessBuilder(CMD_ARRAY);
Powyższy kod będzie działał idealnie.
Ponadto, można użyć
Runtime.getRuntime().exec("java -cp C:/testt Test");
Ale jest to bardziej wygodne w użyciu ProcessBuilder, jednym z powodów jest to, że jeśli nasz argument zawiera przestrzeń musimy przekazać cytat w Runtime.getRuntime().exec()
jak java -cp C:/testt \"argument with space\"
, ale z ProcessBuilder możemy uzyskać pozbyć się tego.
ProcessBuilder processBuilder = new ProcessBuilder("command", "The first argument", "TheSecondWithoutSpace");
zrobiłeś dobrą robotę – darijan