Java执行Shell&Command

Python08

Java执行Shell&Command,第1张

主要使用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()