Runtime.getRuntime()。exec()平台是独立的吗?

时间:2012-02-22 16:16:43

标签: java command runtime platform runtime.exec

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

平台独立或我必须在参数?

中传递特定于平台的命令

由于


命令cmd /c start /b java -jar

的linux等价物是什么

5 个答案:

答案 0 :(得分: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"});

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

答案 1 :(得分:3)

它不是平台独立的。您需要为您要定位的每个操作环境提供一个外部命令版本。

答案 2 :(得分:1)

Runtime.getRuntime().exec()与平台无关。 cmd /c是。你期望在Unix上运行cmd /c是什么?

因此,如果要创建运行外部命令的跨平台程序,则必须保留特定于平台的命令。

答案 3 :(得分:1)

它取决于平台。引用relevant javadoc的一部分(强调我的):

  

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

答案 4 :(得分:1)

当然不是,你正在执行一个shell命令。除非你没有其他更干净的方法去做你想做的事情,否则我不建议你这样做。它违背了Java的便携性目的。