2013-06-12 12 views
5

Chciałbym przekazać wiele parametrów do ProcessBuilder i parametry, które mają być oddzielone spacją.przekazać wiele parametrów do ProcessBuilder z odstępem

Oto polecenia,

String[] command_ary = {dir+"library/crc"," -s ", fileName," ",addressRanges}; 

muszę dostarczyć spacji po „fcrc” i po „p” i „w nazwie pliku pomiędzy” i „adresowy”.

Dziękujemy

+0

zrobiłeś dobrą robotę – darijan

Odpowiedz

18

Nie musisz uwzględniać spacji. ProcessBuilder poradzi sobie z tym za Ciebie. Wystarczy przejść w jednym argumenty za drugim, bez przestrzeni:

ProcessBuilder pb = new ProcessBuilder(
         dir + "library/crc", 
         "-s", 
         fileName, 
         addressRanges); 
+0

Ya ów poprawne, ale CRC exe który Im przy użyciu wymaga przestrzeni między CRC i -S oraz między pliku i adres zakresy przeszły, w przeciwnym razie wygeneruje plik nie znaleziono. wyjątek – mee

+3

@ Czy na pewno błąd "nie znaleziono pliku" nie jest spowodowany przez coś innego? Jeśli używasz względnej ścieżki jako 'fileName', to prawdopodobnie będziesz musiał ustawić poprawny katalog roboczy dla procesu (używając' pb.directory (...) 'zanim zadzwonisz' pb.start() ') –

10

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"); 
-2

Używaj go tak:

new java.lang.ProcessBuilder('netstat -an'.toString().split('\\s'))).start()

+0

powinno działać nawet z 'toString()' – aDoN

+0

W Javie '' 'jest używane dla pojedynczego znaku, a nie jako ciąg – Dici

+0

dlaczego otrzymałem głosowanie w dół, co do cholery? Nie używałeś websplasek JSP z 1 parametrem, wydaje się, chodź, użyj 'CMD_ARRAY', teraz i powiedz mi, czy zamierzasz przekazać kilka parametrów w oparciu o polecenie, które chcesz wykonać? Nie rozśmieszaj mnie ...... te głosy, które otrzymałem, powinny być odwrotnie OMG! – aDoN

Powiązane problemy