import java.io.*;
/**
* 命令行执行工具
* info 命名执行后的输出(包含错误信息)
*/
public class ProcessUtil {
private StringBuffer info;
private String[] commands;
ProcessBuilder pbuilder;
public ProcessUtil() {
commands = new String[3];
if (System.getProperty("os.name").toUpperCase().contains("WIN")) {
commands[0] = "cmd";
commands[1] = "/c";
} else {
commands[0] = "/bin/sh";
commands[1] = "-c";
}
}
public StringBuffer getInfo() {
return info;
}
public String getOutputMessage() {
return info.toString();
}
public int execute(String command) throws IOException, InterruptedException {
return execute(command, null, null);
}
//重载execute
public int execute(String command, String env, File dir) throws IOException, InterruptedException {
this.commands[2] = command;
this.info = new StringBuffer();
pbuilder = new ProcessBuilder(this.commands);
pbuilder.directory(dir);
pbuilder.redirectErrorStream(true);
if (env != null && !env.trim().isEmpty()) {
pbuilder.environment().put("Path", String.format("%s;%s", pbuilder.environment().get("Path"), env));
}
Process process = pbuilder.start();
String line;
InputStreamReader inputStreamReader;
int resultCode = 0;
try (InputStream inputStream = process.getInputStream()){
inputStreamReader = new InputStreamReader(inputStream, "GBK");
BufferedReader rd = new BufferedReader(inputStreamReader);
while ((line = rd.readLine()) != null) {
//特殊处理, 只记录2000 个字符 错误信息太长可导致内存溢出
if (info.length() < 2000) {
this.info.append(line).append("\n");
}
}
resultCode = process.waitFor();
process.destroy();
}catch (Exception e){
e.printStackTrace();
}
return resultCode;
}
}
Java 在Windows和Linux下执行命令的工具
最新推荐文章于 2024-07-31 08:25:07 发布