注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

kangzye的博客

加Q群25382780切磋java,加19360923群研究JavaScript

 
 
 

日志

 
 

如何判断java Process 已经执行完成  

2011-10-19 17:52:27|  分类: java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
有个项目需要拷贝大文件夹,用程序逐个拷贝太麻烦也太慢,于是想到使用本地的 xcopy (linux 下则使用其他命令)
此处先附上网上找得一片关于java 快速拷贝的文章:http://blog.csdn.net/ta8210/article/details/2073817

执行 xcopy 命令倒是容易,这样调用即可:
Process pro = Runtime.getRuntime().exec("xcopy /s/e/h/y  folder1 folder2");

但是,如何检测到命令已经执行完成呢?起初我这样做: pro.waitFor(); 但是线程一直挂起无法返回。
后来换成了读取process 的输出流这种不大雅观的方式,但还算实用。

private String readInputFromProcess(Process pro)throws Exception{
        StringBuffer sb = new StringBuffer();
        String line=null;
        BufferedReader reader = new BufferedReader(new InputStreamReader(pro.getInputStream()));
        try {
            while((line=reader.readLine())!=null){
                sb.append(line).append("\r\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("获取本地进程输出流失败");
        }finally{
            reader.close();
        }
        return sb.toString();
}
Process pro = Runtime.getRuntime().exec("xcopy /s/e/h/y  folder1 folder2");
String str = readInputFromProcess(pro);
// do some thing about  file2
......
另外其如果执行命令报错,会抛出异常,并且可以通过  pro.getErrorStream() 来获得错误信息
  评论这张
 
阅读(3057)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017