使用Runtime.exec()心得

本文探讨了Java中Runtime.exec()方法的使用方法及其注意事项,包括避免同步获取返回参数、及时处理I/O流以及如何正确执行复杂的命令序列。

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的源码,是二进制的,应该可以单独运行吧!本人才疏学浅,实在不知道原因,哪位高人指点一二,小弟感激不尽!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值