有时候需要在Java中向Linux发送命令在这我写了一个工具类可以直接使用,需要的拿去
public class CallShell {
public static int callshell(String command) throws IOException{
Runtime rt = Runtime.getRuntime();
//String command = "/export/home/xlg/solarischk.sh";
Process pcs = rt.exec(command);
//PrintWriter outWriter = new PrintWriter(new File("/export/home/zjg/show.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(pcs.getInputStream()));
String line = new String();
while ((line = br.readLine()) != null) {
System.out.println(line);
//outWriter.write(line);
}
try {
pcs.waitFor();
} catch (InterruptedException e) {
System.err.println("processes was interrupted");
}
br.close();
//outWriter.flush();
//outWriter.close();
int ret = pcs.exitValue();
System.out.println(ret);
System.out.println("执行完毕!");
return ret;
}
/**
* 执行shell命令
*String[] cmd = { "sh", "-c", "lsmod |grep linuxVmux" }或者
*String[] cmd = { "sh", "-c", "./load_driver.sh" }
*int tp = 1 返回执行结果 非1 返回命令执行后的输出
*/
public static String runCommand(String[] cmd, int tp) {
StringBuffer buf = new StringBuffer(1000);
String rt = "-1";
try {
Process pos = Runtime.getRuntime().exec(cmd);
pos.waitFor();
if (tp == 1) {
if (pos.exitValue() == 0) {
rt = "1";
}
} else {
InputStreamReader ir = new InputStreamReader(
pos.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
String ln = "";
while ((ln = input.readLine()) != null) {
buf.append(ln + "<br>");
}
rt = buf.toString();
input.close();
ir.close();
}
} catch (java.io.IOException e) {
rt = e.toString();
} catch (Exception e) {
rt = e.toString();
}
return rt;
}
/**
* 执行简单命令
* String cmd="ls"
*int tp = 1 返回执行结果 非1 返回命令执行后的输出
*/
public static String runCommand(String cmd,int tp){
StringBuffer buf = new StringBuffer(1000);
String rt = "-1";
try {
Process pos = Runtime.getRuntime().exec(cmd);
pos.waitFor();
if (tp == 1) {
if (pos.exitValue() == 0) {
rt = "1";
}
} else {
InputStreamReader ir = new InputStreamReader(
pos.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
String ln = "";
while ((ln = input.readLine()) != null) {
buf.append(ln + "<br>");
}
rt = buf.toString();
input.close();
ir.close();
}
} catch (java.io.IOException e) {
rt = e.toString();
} catch (Exception e) {
rt = e.toString();
}
return rt;
}
/**
* 执行简单命令
* String cmd="ls"
*int tp = 1 返回执行结果 非1 返回命令执行后的输出
*/
public static String runCommand2(String cmd,int tp){
StringBuffer buf = new StringBuffer(1000);
String rt = "-1";
try {
Process pos = Runtime.getRuntime().exec(cmd);
// pos.waitFor();
if (tp == 1) {
if (pos.exitValue() == 0) {
rt = "1";
}
} else {
InputStreamReader ir = new InputStreamReader(
pos.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
String ln = "";
while ((ln = input.readLine()) != null) {
buf.append(ln + "<br>");
}
rt = buf.toString();
input.close();
ir.close();
}
} catch (java.io.IOException e) {
rt = e.toString();
} catch (Exception e) {
rt = e.toString();
}
return rt;
}
}
调用就更简单了,上个例子吧如下,其他方法使用也是一样的,
String cmd = "sudo service vbar start";
//String s = CallShell.runCommand(cmd, 0);
try {
int ret = CallShell.callshell(cmd);
System.out.println("s执行输出的结果为:"+ret);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}