Java在Mac的java程序中执行程序

标签 java macos command-line runtime runtime.exec

我一直在尝试使用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/

相关文章:

macos - 在 Mac OS X Lion 上设置环境变量

mysql - 在 mac 上找不到 mysql 慢查询日志文件

c++ - 更改命令行参数 argv

macos - 如何让 OS X Lion 上的 bash 在选项卡完成期间忽略 .DS_Store 文件?

java - 如何在java中获取数组中的随机颜色

java - Spring AOP Autowiring 异常

java - 如何从Macbook上彻底删除jdk 1.8? Scala Web 应用程序项目

ubuntu - 如何以人类可读的格式查看 ubuntu 中 "top"命令的结果?

Java : Load class based on user input

java - 无法使用 ***Spring Boot*** 解析名称为 'homePage' 的 servlet 中名称为 'dispatcherServlet' 的 View