我一直在尝试使用Java在编码中使用以下代码执行Microsoft Excel:
Process pro = Runtime.getRuntime().exec("open -a Microsoft"+"\\"+" "+"Excel");
pro.waitFor();
当我打印出这个命令时,它正是我在命令行中手动启动Excel所使用的,但是当我想通过使用java运行时启动它时,它无效。我知道在Microsoft Windows命令行中没有这样的问题,但在Mac中是否还有其他方法可以通过使用java代码来启动程序?
我还尝试使用相同的代码启动计算器:
Process pro = Runtime.getRuntime().exec("open -a Calculator");
它完美无缺,是因为“Microsoft”和“Excel”之间的空间?
答案 0 :(得分:2)
java.lang.Runtime.exec(String)
将命令行解析为单个参数本身,并且不知道有关shell元字符的任何信息,例如使用\
来引用应该进入参数的空格字符。
尝试自己拆分参数:
String[] cmdline = { "open", "-a", "Microsoft Excel" };
Runtime.getRuntime.exec(cmdline);
请注意,您不需要(或能够)使用反斜杠来转义第三个元素中的空格。当您在命令行上键入命令时,shell会反复使用该反斜杠,因为它将行拆分为参数以传递给open
程序,但Runtime.exec()在没有shell干预的情况下直接启动进程,所以如果你在那里放一个反斜杠,open
就能看到它,并会被它搞糊涂。