2013-06-12 11 views
5

Vorrei passare più parametri a un ProcessBuilder ei parametri devono essere separati da uno spazio.passare più parametri a ProcessBuilder con uno spazio

Ecco il comando,

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

ho bisogno di fornire uno spazio dopo "FCRC" e dopo "-p" e tra "nome" e il "addressRange".

Grazie

+0

che hai fatto un buon lavoro – darijan

risposta

18

Non è necessario includere spazi. ProcessBuilder si occuperà di ciò per te. Basta passare in argomenti uno per uno, senza spazio:

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

Ya questo è corretto ma l'exe crc che Im usando richiede uno spazio tra la CRC e -s e tra il nome del file e l'indirizzo intervalli passati, altrimenti lancia un file non trovato eccezione – mee

+3

@mee sei sicuro che l'errore "file non trovato" non è causato da qualcos'altro? Se stai usando un percorso relativo come 'fileName', allora probabilmente dovrai impostare la directory di lavoro corretta per il processo (usando' pb.directory (...) 'prima di chiamare' pb.start() ') –

10

Abbiamo bisogno di spazi tra gli argomenti a riga di comando perché la riga di comando ha bisogno di sapere che è il primo argomento, che è il secondo e così via. Tuttavia, quando usiamo ProcessBuilder, possiamo passare un array ad esso, quindi non abbiamo bisogno di aggiungere quegli spazi per differenziare gli argomenti. ProcessBuilder passerà direttamente l'array di comandi allo exec dopo un controllo. Ad esempio,

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

Il codice sopra funzionerà perfettamente.

Inoltre, è possibile utilizzare

Runtime.getRuntime().exec("java -cp C:/testt Test"); 

ma è più comodo da usare ProcessBuilder, uno dei motivi è che se il nostro argomento contiene spazio abbiamo bisogno di passare citazione in Runtime.getRuntime().exec() come java -cp C:/testt \"argument with space\", ma con ProcessBuilder possiamo ottenere liberarsene.

ProcessBuilder processBuilder = new ProcessBuilder("command", "The first argument", "TheSecondWithoutSpace"); 
-2

Utilizzare in questo modo:

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

+0

dovrebbe funzionare anche con 'toString()' – aDoN

+0

In Java '''' è usato per un singolo carattere, non una stringa – Dici

+0

perché ho ricevuto voti negativi, che diamine? Non hai usato un webshell JSP con 1 parametro, sembra, dai, usa quel 'CMD_ARRAY', ora e dimmi, hai intenzione di passare un numero di parametri in base al comando che vuoi eseguire? Non farmi ridere ... questi voti negativi che ho ricevuto dovrebbero essere il contrario, OMG! – aDoN

Problemi correlati