Runtime.getRuntime().exec() 是否与操作系统平台无关?

3

Is

Runtime.getRuntime().exec("cmd /c");

这个命令是平台无关的吗?还是我需要在参数中传递特定于平台的命令?

谢谢


Linux 中相当于 cmd /c start /b java -jar 命令的是什么?


1
cmd 是一个 Windows 命令,不适用于其他操作系统。 - VirtualTroll
1
你认为呢?Java无法提供映射表,因为在所有不同的操作系统之间进行映射是不可能的。 - home
5个回答

7

Runtime.getRuntime().exec() 是平台无关的,它可以在任何平台上启动外部可执行文件。当然,该可执行文件本身必须存在,所以在 Linux 上启动 notepad.exe 很可能不起作用(除非您安装了 Wine 和 Notepad,但这又是另一回事)。

在 Windows 上,输入你想要输入到 cmd.exe 中的任何内容(详细信息如下)。但是为了在 Windows 上进行自动路径查找,您需要执行类似以下命令的操作:

Runtime.getRuntime().exec("start iexplore.exe");

或者

Runtime.getRuntime().exec("start my.pdf");

打开与关联查看器相应的pdf文件。

在Linux上,您可以执行与Bash shell相同的任何操作,但不能使用Bash内置的管道运算符。您只能启动程序并传递参数。

要在Linux上启动另一个Java实例,您可以使用以下命令:

Runtime.getRuntime().exec(new String[] {"java","-jar","myjar.jar"});

如果Java不在PATH中,请使用Java可执行文件的绝对路径。


谢谢您的回复。您能告诉我cmd /c start /b java -jar jarfile.jar在Linux下的等效命令吗? - Tapas Bose

3

它不是平台无关的。你需要为每个你要针对的操作环境准备一个外部命令的版本。


1

Runtime.getRuntime().exec() 是跨平台的。但是 cmd /c 不是。如果你在 Unix 上运行 cmd /c,你期望得到什么呢?

因此,如果你想要编写跨平台的程序来运行外部命令,你必须使用特定于平台的命令。


谢谢。在Linux中,“cmd / c start / b java -jar”的等效命令是什么? - Tapas Bose

1

这是平台相关的。引用相关Javadoc的一部分(我强调):

此方法检查cmdarray是否为有效的操作系统命令。哪些命令是有效的取决于系统,但至少该命令必须是非空的非空字符串列表。


1
当然不行,你正在执行一个 shell 命令。我不建议你用 Java 这样做,除非你没有其他更干净的方法来完成你想要做的事情。这违背了 Java 的可移植性的目的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接