场景:linux下,在web工程里调用一个C++程序,实现代码如下:
StringBuffer cmd = new StringBuffer();
cmd.append("nohup ");
……
System.out.println("执行程序命令:"+cmd.toString());
String[] cmds = { "/bin/sh", "-c", cmd.toString()};
Runtime.getRuntime().exec(cmds, null, new File(McdConstans.FILE_PATH));
简单说明:
exec(String[] cmdarray, String[] envp, File dir)
参数1 cmdarray:执行调用的命令及参数;
参数2 envp:环境变量,如path=c:\java\bin,若未使用则为null;
参数3 dir :执行命令的工作目录;
注:
API里还有类似exec(String command)、exec(String[] cmdarray) 的方法,但其最终调用的是:exec(String[] cmdarray, String[] envp, File dir),只不过envp和dir都被设定为Null了。
个人使用理解:
exec(String command)用于直接调用可执行文件,类似exec("c:\system32\calc.exe");
exec(String[] cmdarray)则用于sh命令、重定向等操作类语句的调用;
File dir参数在调用的程序需访问其对应目录结构时,非常重要,制定后执行的指令时才能在目录上需要寻找其他文件(而不是在java执行环境下寻找,报cannot open file错误)
最后,有个小细节调用程序时需要注意权限,权限不足chmod。
Runtime.getRuntime().exec()调用外部程序
原文:http://www.cnblogs.com/liuyunxi/p/4550531.html