JAVA如何调用Shell脚本

  

在实际项目中,Java有时候需要调用C写出来的东西,除了JNI以外,我认为一种比较好的方法是Java调用壳。先把C写出来的使成可执行文件,然后再写一个Shell脚本执行该可执行文件,最后是Java调用该Shell脚本。

  

JAVA调用很简单,例子如下:

  

首先是shell脚本

        # !/bin/sh   回声开始词集群/home/felven/word2vec/word2vec火车/home/felven/word2vec/resultbig.txt与产出/home/felven/word2vec/classes.csv -cbow 0 200窗口5 - 0 - h 1示例1 e - 3线程12类2000   回声类都保存到文件类。csv      

然后是JAVA调用代码
  

        进口java.io.BufferedReader;   进口java.io.InputStreamReader;      公开课RunShell {   公共静态void main (String [] args) {   尝试{   字符串shpath="/home/felven/word2vec/demo-classes.sh”;   过程ps=Runtime.getRuntime () .exec (shpath);   ps.waitFor ();      BufferedReader br=new BufferedReader(新InputStreamReader (ps.getInputStream ()));   StringBuffer某人=new StringBuffer ();   字符串行;   在((=brreadLine行())!=null) {   sb.append(线).append (“\ n”);   }   字符串的结果=sbtoString ();   System.out.println(结果);   }   捕获(异常e) {   e.printStackTrace ();   }   }   }   之前      

其实就是一个过程类进行调用,然后把壳的执行结果输出到控制台下。

  

需要注意的是,在调用时需要执行waitFor()函数,因为壳进程是JAVA进程的子进程,JAVA作为父进程需要等待子进程执行完毕。

  

另外在eclipse控制台输出时并不是边执行边输出,而是壳牌全部执行完毕后输出,所以如果执行较为复杂的shell脚本看到没有输出时可能会误以为没有执行,这个时候看看终端里面的进程,顶级命令一下就能看到其实壳脚本已经开始执行了。

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

JAVA如何调用Shell脚本