现在的位置: 首页 > 综合 > 正文

使用Runtime.exec()心得

2013年10月01日 ⁄ 综合 ⁄ 共 585字 ⁄ 字号 评论关闭

java语言是跨平台的,但很多时候难免会调用平台上原有的程序。java.lang.Runtime的方法exec()就可以执行平台上的程序。

先看一篇文章,讲了Runtime.exec()的一些不尽人意的地方http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html

心得:

1.不要试图对exec()执行的程序异步取得返回参数;

2.及时得处理程序的输入和输出(即使你不用这些数据),否则会出现难以预料的后果;

3.不要把exec()当作一个shell的命令行,exec()只能执行一个程序。有个比较好的解决方案,在linux里可以利用sh -c命令来模拟一个命令行,在windows中则是cmd /c。

特殊情况:

exec("/bin/cp -r /root/test1 /root/test2");执行后/root/test2里面是空的,为什么会这样?难道cp需要解析器?好像cp也是一个正儿八经的程序啊!!无奈之余,改为exec( new String[]{"sh","-c","/bin/cp -r /root/test1 /root/test2"} );嘿嘿,不改不知道,一改吓一跳,好了!咋会这样呢?再查看/bin/cp的源码,是二进制的,应该可以单独运行吧!本人才疏学浅,实在不知道原因,哪位高人指点一二,小弟感激不尽!

抱歉!评论已关闭.