我一直在尝试使用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”之间有空格吗?
最佳答案
java.lang.Runtime.exec(String)
将命令行本身解析为单个参数,并且不知道有关 shell 元字符的任何信息,例如使用 \
来引用应该进入参数的空格字符。
尝试自己进行论证:
String[] cmdline = { "open", "-a", "Microsoft Excel" };
Runtime.getRuntime.exec(cmdline);
请注意,您不需要(或能够)使用反斜杠来转义第三个元素中的空格。当您在命令行上键入命令时,该反斜杠会被 shell 吃掉,因为它将该行拆分为参数以传递给 open
程序,但 Runtime.exec() 会直接启动进程而无需干预外壳的,所以如果你在那里放一个反斜杠,open
将能够看到它,并且会被它迷惑。
关于Java在Mac的java程序中执行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13169205/