Java ProcessBuilder忽略空格

时间:2014-12-09 08:17:36

标签: java cmd processbuilder

我尝试通过Java命令shell从Java启动一个程序,遇到我自己无法解决的错误。我使用ProcessBuilder将参数传递给命令shell。

段:

try{
        List<String> list = new ArrayList<String>();
        list.add("cmd.exe");
        list.add("/c");
        list.add("C:\\Program Files (x86)\\TightVNC\\tvnserver.exe -controlservice -connect 172.20.242.187");
        ProcessBuilder builder = new ProcessBuilder(list);
        System.out.println(builder.command());
        builder.redirectErrorStream(true);
        Process p = builder.start();
        BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line;
        while(true){
            line = r.readLine();
            if(line == null) { break; }
            System.out.println(line);
        }
} catch {...}

我的问题是忽略了程序路径中的空格。 控制台输出:

  

[cmd.exe,/ c,C:\ Program Files(x86)\ TightVNC \ tvnserver.exe -controlservice -connect 172.20.242.187]   Der Befehl“C:\ Program”ist entweder falsch geschrieben oder   konnte nicht gefunden werden。

(无法找到C:\ Program)。

在网络上我发现类似的问题,即使在StackOverflow和其他网站完全像我一样,请参阅Run cmd commands through java的示例 区别于我将参数作为http://www.tutorialspoint.com/java/lang/processbuilder_command_list.htm

中提到的列表传递

所以我不明白为什么我的命令不起作用。我感谢任何帮助

编辑我必须动态添加路径,以便在创建ProcessBuilder对象时无法传递参数。

1 个答案:

答案 0 :(得分:1)

如果您的路径包含空格,则需要双引号(\"):

    list.add("\"C:\\Program Files (x86)\\TightVNC\\tvnserver.exe\" -controlservice -connect 172.20.242.187");