关于RunTime.exec的问题,大家帮个忙,我已经三天没搞定它了

mmmaaaggg 2006-05-26 09:08:43
我的最初设想是实现这样的功能,一个B/S结构的项目,
用户通过网页操作,将指定的一组文件打成zip包,并将zip分割成每个不超过2MB大小的包,
想到winzip软件有此功能,于是打算借用此软件的文件拆分打包功能,
winzip软件支持命令行执行功能,
执行语句如,wzzip -ybc -ys2048 a0zip.zip a0split
意思是说:将a0zip.zip文件,按2MB大小拆分成名为a0split的文件。
在cmd里运行此语句,一切正常。
于是在WebSphere Studio Application Developer(以后简称WSAD)中编写代码,关键代码如下:
try
{
File dir=new File("D:\\zip\\");
String[] command2={"wzzip","-ybc","-ys2048","a0zip.zip","a0split"};
log.info("Runtime", "Start!");
Process child = Runtime.getRuntime().exec(command2,null,dir);
log.info("Runtime", "Finished!");
// 获取命令执行的情况以判断是否执行成功,同时记录日志
log.info("Runtime", "getInputStream!");
InputStream in = child.getInputStream(); //运行到这里时停住了
log.info("Runtime", "getInputStream Finished!");
int c;
String result="";
while ((c = in.read()) != -1) {
result+=(char)c;
}
log.info("Runtime result", result);
in.close();
} catch (Exception e) {
.....
}
写完后,开启WSAD测试服务器,运行。
当程序运行到InputStream in = child.getInputStream();时就开始停住了。不抛出异常,也不继续运行。
这时候,在D:\zip\目录下生成一个临时文件,但程序无论等多久都不在有动静了。
如果将测试服务器关闭,这时指定的分割后的文件a0split文件出现了,临时文件没有了。
如果将InputStream in = child.getInputStream();这行及后面的相关代码注释掉,重新运行,程序将正常运行,并且文件也会正确的生成。
想问一下这个是怎么回事?
应该怎么修改才能够正确的获取命令的执行结果信息呢?

麻烦各位GGJJ帮个忙,解决一下吧!
谢谢了。
...全文
324 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingofworl 2006-05-26
  • 打赏
  • 举报
回复
Process child = Runtime.getRuntime().exec(command2,null,dir);

后加一句
child.waitFor()

67,516

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧