java执行shell命令
目录
java执行shell命令
ShellCommand.java
import java.io.IOException;
public class ShellCommand
{
public static void execCmd(String cmd)
{
execCmd(cmd, null);
}
public static void execCmd(String cmd, StringBuffer sb)
{
Process process = null;
try {
process = Runtime.getRuntime().exec(cmd);
getProcessOutput(process, sb);
} catch (Exception e) {
if (sb != null) {
sb.append("executeCmd: " + cmd + "\n");
sb.append("errorMessage: " + e.toString() + "\n");
}
}
if (process != null) {
try {
process.waitFor();
process.getOutputStream().close();
process.getErrorStream().close();
process.getInputStream().close();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private static void getProcessOutput(Process process, StringBuffer sb)
{
if (process == null) {
return;
}
StreamCaptureThread errorStream = new StreamCaptureThread(process.getErrorStream());
StreamCaptureThread inputStream = new StreamCaptureThread(process.getInputStream());
errorStream.setOutput(sb);
inputStream.setOutput(sb);
new Thread(errorStream).start();
new Thread(inputStream).start();
}
}
StreamCaptureThread.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class StreamCaptureThread implements Runnable
{
InputStream m_in;
StringBuffer m_sb;
public StreamCaptureThread(InputStream inputStream)
{
this.m_in = inputStream;
}
public void setOutput(StringBuffer sb)
{
m_sb = sb;
}
public void run()
{
try {
BufferedReader br = new BufferedReader(new InputStreamReader(m_in));
String line = null;
while (m_in != null && (line = br.readLine()) != null) {
if (line.trim().length() > 0) {
if (m_sb != null) {
m_sb.append(line);
m_sb.append("\n");
}
}
}
} catch (IOException ex) {
ex.printStackTrace(System.err);
}
}
}