方式一:调用ProcessBuilder执行
/**
* 调用ProcessBuilder执行,相比Runtime方式,返回值不易丢失
* @param command 命令
* @return 执行结果
*/
public static String execute(String command) {
BufferedReader bufferedReader = null;
StringBuilder stringBuilder = new StringBuilder();
String result = null;
try {
File file = new File("C:\\daemonTmp");
// 新建一个存储结果的缓存文件
File tmpFile = new File("C:\\daemonTmp\\temp.tmp");
if (!file.exists()) {
file.mkdirs();
}
if (!tmpFile.exists()) {
tmpFile.createNewFile();
}
ProcessBuilder processBuilder = new ProcessBuilder()
.command("cmd.exe", "/c", command).inheritIO();
// 把控制台中的红字变成了黑字,用通常的方法其实获取不到,控制台的结果是pb.start()方法内部输出的。
processBuilder.redirectErrorStream(true);
// 输出执行结果。
processBuilder.redirectOutput(tmpFile);
// 等待语句执行完成,否则可能会读不到结果。
processBuilder.start().waitFor();
InputStream inputStream = new FileInputStream(tmpFile);
//设置编码
bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "GBK"));
String line = null;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line + "\n");
}
bufferedReader.close();
bufferedReader = null;
result = stringBuilder.toString();
} catch(Exception e) {
e.printStackTrace();
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
return result;
}
方式二:调用Runtime执行
/**
* 调用Runtime执行
* @param command 命令
* @return 执行结果
*/
public static String executeRuntime(String command) {
Runtime runtime = Runtime.getRuntime();
String result = null;
try {
StringBuilder stringBuilder = new StringBuilder();
//启动
Process process = runtime.exec(command);
InputStream in = process.getInputStream();
//获取返回值,有时候会获取不到
while (in.read() != -1) {
stringBuilder.append(in.read());
}
in.close();
process.waitFor();
result = stringBuilder.toString();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
《中医之钥》