2013-06-12 3 views
5

Ich würde gerne mehrere Parameter an einen ProcessBuilder übergeben und die Parameter durch ein Leerzeichen getrennt werden. Hierübergeben mehrere Parameter zu ProcessBuilder mit einem Leerzeichen

ist der Befehl,

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

Ich brauche einen Raum nach dem „FCRC“ zur Verfügung zu stellen und nach „-p“ und zwischen „Dateinamen“ und dem „addressRange“.

Vielen Dank

+0

haben Sie einen guten Job – darijan

Antwort

18

Sie müssen keine Leerzeichen einschließen. Der ProcessBuilder wird das für Sie erledigen. Übergeben Sie einfach in Ihre Argumente eins nach dem anderen, ohne Leerzeichen:

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

Ya das ist richtig, aber die crc exe, die Im erfordert Raum mit zwischen dem crc und -s und zwischen Dateiname und die Adresse Bereiche übergeben, sonst löst es eine Datei nicht gefunden Ausnahme – mee

+3

@mee sind Sie sicher, dass der Fehler "Datei nicht gefunden" nicht durch etwas anderes verursacht wird? Wenn Sie einen relativen Pfad als 'fileName' verwenden, müssen Sie vermutlich das richtige Arbeitsverzeichnis für den Prozess einstellen (mit' pb.directory (...) ', bevor Sie' pb.start() 'aufrufen) –

10

Wir brauchen Räume zwischen Argumente in Commandline, weil die Kommandozeile wissen müssen, welche das erste Argument, das die zweite und so weiter. Wenn wir jedoch ProcessBuilder verwenden, können wir ein Array an es übergeben, so dass wir diese Leerzeichen nicht hinzufügen müssen, um die Argumente zu unterscheiden. Der ProcessBuilder übergibt das Befehls-Array nach einer Überprüfung direkt an das exec. Zum Beispiel

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

Der obige Code wird perfekt funktionieren.

Darüber hinaus können Sie

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

verwenden, aber es ist bequemer Process zu verwenden, ist ein Grund, dass, wenn unser Argument Raum enthält, stellen wir Zitat in Runtime.getRuntime().exec() wie java -cp C:/testt \"argument with space\" übergeben müssen, aber mit Processbuilder können wir bekommen Loswerden.

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

Verwenden Sie es wie folgt aus:

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

+0

sollte es sogar mit 'toString()' funktionieren – aDoN

+0

In Java '' 'wird für ein einzelnes Zeichen verwendet, nicht für eine Zeichenkette – Dici

+0

Warum habe ich Down-Stimmen erhalten, was zum Teufel¿? Du hast keine JSP Webshell mit 1 Parameter benutzt, es scheint, komm, benutz 'CMD_ARRAY', und sag mir, wirst du eine Anzahl von Parametern basierend auf dem Befehl übergeben, den du ausführen willst? Bring mich nicht zum Lachen ...... diese Down-Stimmen, die ich erhalten habe, sollten umgekehrt sein! – aDoN