主要使用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(1);
}
}
public void execueteCommand(String command) throws InterruptedException {
System.out.println("************************");
System.out.println("Execute command :"+command);
System.out.println("Result:");
try {
pro = runTime.exec(command);
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(-1 != 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);
原文出自【比特网】,转载请保留原文链接:http://soft.chinabyte.com/database/305/11413805.shtml