shell脚本调用java方法

2025-10-04 14:04:09

1、在java程序中如何调用linux的命令?如何调用shell脚本呢?这里不得不提到java的process类了。process这个类是一个抽象类,封装了一个进程(你在调用linux的命令或者shell脚本就是为了执行一个在linux下执行的程序,所以应该使用process类)。process类提供了执行从进程输入,执行输出到进程,等待进程完成,检查进程的推出状态,以及shut down掉进程。至于详细的process类的介绍放在以后介绍。另外还要注意一个类:Runtime类,Runtime类是一个与JVM运行时环境有关的类,这个类是Singleton的。这里用到的Runtime.getRuntime()方法是取得当前JVM的运行环境,也是java中唯一可以得到运行环境的方法。(另外,Runtime的大部分方法都是实例方法,也就是说每次运行调用的时候都需要调用到getRuntime方法)下面说说Runtime的exec()方法,这里要注意的有一点,就是public Process exec(String [] cmdArray, String [] envp);这个方法中cmdArray是一个执行的命令和参数的字符串数组,数组的第一个元素是要执行的命令往后依次都是命令的参数,envp感觉应该和C中的execve中的环境变量是一样的,envp中使用的是name=value的方式。

shell脚本调用java方法

2、方法一:

for((i=201;i<=270;i++));

do

s='0';

s=$s$i;

echo $s;

java com.netease.news.logic.MenuGen $s;

done

echo "done"

shell脚本调用java方法

3、方法二:

 String cmdstring = "chmod a+x test.sh"; Process proc = Runtime.getRuntime().exec(cmdstring); proc.waitFor(); //阻塞,直到上述命令执行完 cmdstring = "bash test.sh"; //这里也可以是ksh等 proc = Runtime.getRuntime().exec(cmdstring); // 注意下面的操作  string ls_1; BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(proc.getInputStream()); while ( (ls_1=bufferedReader.readLine()) != null); bufferedReader.close(); proc.waitFor();

shell脚本调用java方法

4、为什么要有上面那段操作呢?

原因是:可执行程序的输出可能会比较多,而运行窗口的输出缓冲区有限,会造成waitFor一直阻塞。解决的办法是,利用Java提供的Process类提供的getInputStream,getErrorStream方法让Java虚拟机截获被调用程序的标准输出、错误输出,在waitfor()命令之前读掉输出缓冲区中的内容。

shell脚本调用java方法

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢