主要使用Runtime和Process两个类 其中如何对Process进行输入是关键 尤其注意在合适的时候flush输出流
package shelltest
import java io BufferedReader
import java io IOException
import java io InputStreamReader
import java io OutputStreamWriter
import java io PrintWriter
import java util logging Level
import java util logging Logger
/**
*
* @author Wei Liu
*/
public class Shell {
private Process pro = null
private Runtime runTime = null
public Shell() {
runTime = Runtime getRuntime()
if (runTime == null) {
System err println( Create runtime false! )
System exit( )
}
}
public void execueteCommand(String mand) throws InterruptedException {
System out println( ************************ )
System out println( Execute mand : +mand)
System out println( Result: )
try {
pro = runTime exec(mand)
BufferedReader input = new BufferedReader(new InputStreamReader(pro getInputStream()))//这个输入流是获取shell输出的
PrintWriter output= new PrintWriter(new OutputStreamWriter(pro getOu tputStream()))//这个输出流主要是对Process进行输入控制用的
String line
while ((line = input readLine()) != null) {
System out println(line)
if( != line indexOf( your name )){//当检测到提示输入时 则执行输入操作
output print( liuwei\r\n )// \r\n 不可少 否则相当于没有Enter操作
output flush()//输入完成之后一定要flush 否则一直处在等待输入的地方
}
}
System out println( ************************\n )
input close()
output close()
pro destroy()
} catch (IOException ex) {
Logger getLogger(Shell class getName()) log(Level SEVERE null ex)
}
}
lishixinzhi/Article/program/Java/hx/201311/27038
如果shell脚本和java程序运行在不同的服务器上,可以使用远程执行Linux命令执行包,使用ssh2协议连接远程服务器,并发送执行命令就行了,ganymed.ssh2相关mave配置如下,你可以自己百度搜索相关资料。
如果shell脚本和java程序在同一台服务器上,
这里不得不提到java的process类了。
process这个类是一个抽象类,封装了一个进程(你在调用linux的命令或者shell脚本就是为了执行一个在linux下执行的程序,所以应该使用process类)。
process类提供了执行从进程输入,执行输出到进程,等待进程完成,检查进程的推出状态,以及shut down掉进程。
<dependency><groupId>com.ganymed.ssh2</groupId>
<artifactId>ganymed-ssh2-build</artifactId>
<version>210</version>
</dependency>
本地执行命令代码如下:
String shpath="/test/test.sh" //程序路径Process process =null
String command1 = “chmod 777 ” + shpath
process = Runtime.getRuntime().exec(command1)
process.waitFor()