java调用process执行命令
public
class
ShellUtil {
public static String runShell (String shStr) throws Exception {
Process process;
process = Runtime.getRuntime().exec( new String[]{ "/bin/sh" , "-c" ,shStr});
process.waitFor();
BufferedReader read = new BufferedReader( new InputStreamReader(process.getInputStream()));
String line = null ;
String result = "" ;
while ((line = read.readLine())!= null ){
result+=line;
}
return result;
}
}
public static String runShell (String shStr) throws Exception {
Process process;
process = Runtime.getRuntime().exec( new String[]{ "/bin/sh" , "-c" ,shStr});
process.waitFor();
BufferedReader read = new BufferedReader( new InputStreamReader(process.getInputStream()));
String line = null ;
String result = "" ;
while ((line = read.readLine())!= null ){
result+=line;
}
return result;
}
}
注意:如果是windows操作系统要改为
Runtime.getRuntime().exec(new String[]{"**cmd** exe","-c","command"});
1.当要执行多条时且不依赖事务,可以分开多次调用
public
class
ExecuteShell {
public static void main (String[] args){
String command1 = "some command" ;
String command2 = "some command" ;
String message1 = ShellUtil.runShell(command1);
String message2 = ShellUtil.runShell(command2);
System. out .println(message1);
System. out .println(message2);
}
}
public static void main (String[] args){
String command1 = "some command" ;
String command2 = "some command" ;
String message1 = ShellUtil.runShell(command1);
String message2 = ShellUtil.runShell(command2);
System. out .println(message1);
System. out .println(message2);
}
}
2.但是当命令之间有事务依赖时,比如一条命令是登录数据库,第二条执行查询语句,上面分开多次调用的方式就不行。需要做改动如下
public
class
ExecuteShell {
public static void main (String[] args){
String command1 = "some command" ;
String command2 = "some command" ;
String command = command1 + " && " + command2;
String message = ShellUtil.runShell(command);
System. out .println(message);
}
}
public static void main (String[] args){
String command1 = "some command" ;
String command2 = "some command" ;
String command = command1 + " && " + command2;
String message = ShellUtil.runShell(command);
System. out .println(message);
}
}