Java Process Class : Java 执行外部程序及命令 .

不知道大伙有没有遇到类似的问题, 你用java搭建了一个系统平台,却发现你想引入的一个组件是用其它语言写成的。 如果那个组件是用c写的,你或许会想用java native code就可解决,但是如果那个组件是用perl, python, ruby写的,你又该如何呢? 如果你没有那个组件的源代码, 只有该组件已编译好的程序,你又该如何呢?

 

这种问题不是不可能发生的,本人从事数据挖掘系统的开发,之前就遇到这样的问题。我在网上找到了一个很好的分类算法-c4.5, 那是个开源软件, 用c写成的,非常复杂难读。另一方面,我们担心如果硬把这个c程序改成 java程序,它的运行效率会下降,正所谓是吃力不讨好。最后我们找到了‘使用java直接执行外部程序’ 这个方法来解决问题。

 

方法很简单,其实只要使用两个在java.lang包中的类就能解决,一个是java.lang.Runtime, 另一个为java.lang.Process, 费话少说,各位懂行的看官,请看代码:

 

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class ExeAgent {

    /**
     * @rwang
     */

    /*
     Class Runtime is the object to run external program
     Class Process is the object to handle the outputs
     *
     */
  public static void execute(String commands){
    try {
         Runtime rt = Runtime.getRuntime();     
         Process pr = rt.exec(commands);  // Exception need to be handle

         BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));

         String line=null;

         while((line=input.readLine()) != null) {
              System.out.println(line);
          }

      
      } catch(Exception e) {
          System.out.println(e.toString());
          e.printStackTrace();
      }
     
  }               
       
   
    public static void main(String[] args) {

     String line = "java HelloWorld";  //  java HelloWorld 是一个可执行命令, 任何可执行命令(程序)都可以替换它

     // String line = "dir"    dir命令将会被执行
     ExeAgent.execute(line);

    }

}

 

如果希望JVM等候外部命令完成执行后, 再继续执行余下命令行。 可以使用 waitFor() 方法,  例代码为:

 Runtime rt = Runtime.getRuntime();     
 Process pr = rt.exec(commands);
 try{
   int status = pr.waitFor();
 }catch(InterruptedException e){}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值