您的位置:首页 > 运维架构 > Shell

java 执行shell命令,并获取执行结果

2017-12-13 14:47 696 查看
import
com.google.common.base.Strings;
import
org.apache.log4j.Logger;

import
java.io.*;
import
java.util.ArrayList;
import
java.util.List;

/**
* 执行系统命令, 返回执行结果
*
@param
cmd
需要执行的命令
*
@param
dir
执行命令的子进程的工作目录, null 表示和当前主进程工作目录相同
*/
public static
String execCmd(String cmd, File dir) {
StringBuilder result =
new
StringBuilder();

Process process =
null;
BufferedReader bufrIn =
null;
BufferedReader bufrError =
null;

try
{
String[] commond = {"/bin/sh","-c",cmd};
//
执行命令, 返回一个子进程对象(命令在子进程中执行)
process
= Runtime.getRuntime().exec(commond,
null, dir);

//
方法阻塞, 等待命令执行完成(成功会返回0)
process.waitFor();

//
获取命令执行结果, 有两个结果: 正常的输出 和 错误的输出(PS: 子进程的输出就是主进程的输入)
bufrIn
= new
BufferedReader(new
InputStreamReader(process.getInputStream(),
"UTF-8"));
bufrError =
new
BufferedReader(new
InputStreamReader(process.getErrorStream(),
"UTF-8"));

//
读取输出
String
line = null;
while
((line = bufrIn.readLine()) !=
null) {
result.append(line).append('\n');
}
while
((line = bufrError.readLine()) !=
null) {
result.append(line).append('\n');
}

}catch
(Exception e){
logger.error(e);
}finally
{
closeStream(bufrIn);
closeStream(bufrError);

//
销毁子进程
if
(process !=
null) {
process.destroy();
}
}

//
返回执行结果
return
result.toString();
}

private static void
closeStream(Closeable stream) {
if
(stream !=
null) {
try
{
stream.close();
}
catch
(Exception e) {
//
nothing
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java执行shell命令