2013-06-12 3 views
5

Я хотел бы передать несколько параметров processBuilder и параметры, которые будут разделены пробелом.передать несколько параметров ProcessBuilder с пробелом

Вот команда,

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

Мне нужно обеспечить место после того, как «FCRC» и после «-p» и между «имя файла» и «addressRange».

Спасибо

+0

вы сделали хорошую работу – darijan

ответ

18

Вам не нужно включать пробелы. ProcessBuilder будет иметь дело с этим для вас. Просто передайте в ваших аргументах один за другим, без пробелов:

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

Я вот правильно, но CRC ехе, который с помощью Im требует пространства между стс и -s и между именем файла и адрес пробелы пройдены, в противном случае он выдает исключение, не найденное файлом – mee

+3

@mee вы уверены, что ошибка «файл не найден» не вызвана чем-то другим? Если вы используете относительный путь как 'fileName', вам, вероятно, потребуется установить правильный рабочий каталог для процесса (используя' pb.directory (...) 'перед вызовом' pb.start() ') –

10

Нам нужны пробела между аргументами в командной строке, поскольку командная строка должны знать, что является первым аргументом, который является вторым и так далее. Однако, когда мы используем ProcessBuilder, мы можем передать ему массив, поэтому нам не нужно добавлять эти пробелы, чтобы отличать аргументы. После некоторой проверки ProcessBuilder будет напрямую передавать массив команд в exec. Например,

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

Приведенный выше код будет работать отлично.

Кроме того, вы можете использовать

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

Но удобнее использовать ProcessBuilder, одна причина заключается в том, что если наш аргумент содержит пространство, которое мы должны передать цитату в Runtime.getRuntime().exec() как java -cp C:/testt \"argument with space\", но с ProcessBuilder мы можем получить Избавься от этого.

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

Используйте это так:

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

+0

он должен работать даже с 'toString()' – aDoN

+0

В Java '' 'используется для одного символа, а не для строки – Dici

+0

, почему я получаю поданные голоса, что за черт? Вы не использовали веб-часть JSP с 1 параметром, кажется, давайте, используйте это 'CMD_ARRAY', теперь и скажите мне, собираетесь ли вы передать несколько параметров на основе команды, которую вы хотите выполнить? Не заставляй меня смеяться ... эти пустые голоса, которые я получил, должны быть наоборот ОМГ! – aDoN