有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ProcessBuilder在使用多个参数时运行不正常

我有一个ProcessBuilder:

String src = c:/hello/
String dst = c:/hello/2

ProcessBuilder builder = null;
builder = new ProcessBuilder("c:/file/file.exe", "-i", src, "-f", "-l 500", dst);
builder.redirectErrorStream(true);
process = builder.start();

问题是,只要我添加"-l 500",我就会得到输出:

"l 500" invalid command

即使我输入了"-l 500"而不是"l 500"。如果我输入"--l 500",我会得到:

"-l 500" invalid command

即使在命令提示符下运行-l 500是有效的命令

如果我删除"-l 500",它会再次工作

我使用Processbuilder是不是错了

编辑:

好吧,如果我把“-l”和“500”分别作为这样的条目,它似乎是有效的:

new ProcessBuilder("c:/file/file.exe", "-i", src, "-f", "-l", "500", dst);

为什么会这样?我不能让一个命令中的空格作为同一个条目吗


共 (2) 个答案

  1. # 1 楼答案

    在命令提示下运行它时,不会将-l 500括在引号中,因此它们被视为两个不同的参数。在命令行中输入:

    file.exe -i some_source -f "-l 500" some_dest

    我希望您会看到与错误使用ProcessBuilder时相同的错误消息。file.exe程序必须分析命令行,搜索带有前导-字符的字符串。当它找到单个字符串"-l 500"时,它会删除-,并且不会将l 500识别为有效参数

    ProcessBuilder的参数类似于命令行中引用的参数

  2. # 2 楼答案

    我认为ProcessBuilder的意图是提供帮助,但它不是直观的,而且它对它的行为方式非常敏感。 不管怎么说,其他人的回答是正确的,在这里,我只是粘贴了一个小代码,说明如何使用它而不必太费劲

    String command = String.format("c:/file/file.exe -i %s -f -l 500 %s", src, dst);
    
    ProcessBuilder ps = new ProcessBuilder(command.split(" "));
    

    是的,像通常那样编写命令,然后使用split来使用接收字符串列表的构造函数