java:java.lang.Runtime类执行linux脚本Demo

先上代码:

jdk 1.7

package com.bjsxt;

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

public class JavaExecuShell {
	public static void main(String[] args) {
		try {
			//准备脚本
			String cmd = "sh /usr/local/javaTest/javaExecuteShelltest.sh "+args[0]+" "+args[1]; 
			System.out.println("cmd = "+ cmd);
			Process proc = Runtime.getRuntime().exec(cmd);
			/**
			 * 可执行程序的输出可能会比较多,而运行窗口的输出缓冲区有限,会造成waitFor一直阻塞。
			 * 解决的办法是,利用Java提供的Process类提供的getInputStream,getErrorStream方法
			 * 让Java虚拟机截获被调用程序的标准输出、错误输出,在waitfor()命令之前读掉输出缓冲区中的内容。
			 */
			String flag ;
			BufferedReader bufferedReader = 
					new BufferedReader(new InputStreamReader(proc.getInputStream()));
			while ( (flag=bufferedReader.readLine()) != null){
				System.out.println("result ---- "+flag);
			}
			bufferedReader.close();
			/**
			 * 等待脚本执行完成
			 */
			proc.waitFor();
			
		} catch (IOException | InterruptedException e) {
			e.printStackTrace();
		}
	}
}

linux上的目录:

java:java.lang.Runtime类执行linux脚本Demo

javaExecuteShelltest.sh中设置为可传入参数,并打印: 

java:java.lang.Runtime类执行linux脚本Demo 

将路径在代码中指定好,然后打成jar包上传到linux中即可。

执行结果:

 java:java.lang.Runtime类执行linux脚本Demo

上图结果为java代码中打印出的语句:

java:java.lang.Runtime类执行linux脚本Demo