Runtime.getRuntime().exec()调用外部程序
2015-06-03 22:52
344 查看
场景: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));
简单说明:
, java.lang.String[], java.io.File)]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。
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));
简单说明:
, java.lang.String[], java.io.File)]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。
相关文章推荐
- SQL 的日期操作
- Android 用MediaCodec实现视频硬解码
- listview中edittext复用导致下面的自动填写
- Action Bar详解
- Unix/Linux下的动态库和静态库、动态加载共享库
- How to Write a Spelling Corrector代码注释
- web 项目ant打包完整案例
- JFrame、JDialog close
- java 枚举-抽象方法结合使用
- Laravel中的信息验证 和 语言包
- makefile编译文件介绍
- JVM工作原理介绍
- 携程事件简单故障分析
- 今天是我第一篇微博
- springMVC Required MultipartFile parameter 'file' is not present error
- UGUI(四)事件系统的封装
- 触及摄影,爱我所好
- MySql5.5.8安装
- Android启动原理剖析
- C++能否成为你新的脚本语言?