Java调用Linux脚本。需要用到两个类,一个是Process,另一个是Runingtime。
Process类是创建了一个进程,process类提供了执行从进程输入,执行输出到进程,等待进程完成,检查进程的推出状态,以及shut down掉进程。
这里用到的Runtime.getRuntime()方法是取得当前JVM的运行环境,也是java中唯一可以得到运行环境的方法。(另外,Runtime的大部分方法都是实例方法,也就是说每次运行调用的时候都需要调用到getRuntime方法)。创建了进程和JVM的环境,就可以进行she'll脚本了。
String shpath=".../data/dcm2nii"; //程序路径
try {
Process ps = Runtime.getRuntime().exec(shpath);
ps.waitFor();
BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append("\n");
}
String result = sb.toString();
System.out.println(result);
}
catch (Exception e) {
e.printStackTrace();
}
BufferedReader是创建了一个缓冲器,即读取所有的脚本输出信息,将读取到的脚本信息,存储到字符串缓冲器中,然后将其转换为字符串,就可以输出了。这里也看以看出
在调用时需要执行waitFor()函数,因为shell进程是JAVA进程的子进程,JAVA作为父进程需要等待子进程执行完毕。
另外在eclipse控制台输出时并不是边执行边输出,而是shell全部执行完毕后输出,所以如果执行较为复杂的shell脚本看到没有输出时可能会误以为没有执行,这个时候看看终端里面的进程,TOP命令一下就能看到其实shell脚本已经开始执行了。
当she'll的输出超过一定的内存时,应该会出现溢出的现象。以后需要注意。
参考:
http://www.cnblogs.com/xuxiuxiu/p/6266606.html
http://www.cnblogs.com/x_wukong/p/5148152.html