使用空格将多个参数传递给ProcessBuilder

mee*_*mee 8 java processbuilder

我想将多个参数传递给processBuilder,并将参数分隔为空格.

这是命令,

String[] command_ary = {dir+"library/crc"," -s ", fileName," ",addressRanges};
Run Code Online (Sandbox Code Playgroud)

我需要在"fcrc"之后和"-p"之后以及"filename"和"addressRange"之间提供一个空格.

谢谢

ass*_*ias 22

您不需要包含空格.ProcessBuilder将为您处理.只要一个接一个地传递你的参数,没有空格:

ProcessBuilder pb = new ProcessBuilder(
                         dir + "library/crc",
                         "-s",
                         fileName,
                         addressRanges);
Run Code Online (Sandbox Code Playgroud)

  • @mee你确定"找不到文件"错误不是由别的东西引起的吗?如果您使用相对路径作为`fileName`,那么您可能需要为进程设置正确的工作目录(在调用`pb.start()之前使用`pb.directory(...)` (3认同)

Sta*_*kER 11

我们在命令行中的参数之间需要空格,因为命令行需要知道哪个是第一个参数,哪个是第二个,依此类推.但是当我们使用时ProcessBuilder,我们可以将数组传递给它,因此我们不需要添加这些空格来区分参数.exec一些检查后,ProcessBuilder将直接将命令数组传递给.例如,

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);
Run Code Online (Sandbox Code Playgroud)

上面的代码将完美地工作.

而且,你可以使用

Runtime.getRuntime().exec("java -cp C:/testt Test");
Run Code Online (Sandbox Code Playgroud)

但它使用的ProcessBuilder更方便,一个原因是,如果我们的参数包含空间,我们需要通过报价在Runtime.getRuntime().exec()类似java -cp C:/testt \"argument with space\",但与我们的ProcessBuilder可以摆脱它.

ProcessBuilder processBuilder = new ProcessBuilder("command", "The first argument", "TheSecondWithoutSpace");
Run Code Online (Sandbox Code Playgroud)