java调用cmd命令
2020-12-13 01:59
标签:info throws rms man for 阻塞 eth 线程 get 1.使用Runtime中exec(String command)方法执行cmd命令,如下: 此方法会抛出IOException,但是在项目中遇到没有出现异常,命令也没有执行的情况。 2.此方法可以达到大多的cmd调用的期望结果,但有些时候回出现命令卡死在p.waitFor();上,造成线程阻塞,原因:https://blog.csdn.net/weixin_34408624/article/details/86015882 3.使用以下方法不会出现和2一样情况下得阻塞的问题,与2的区别就是获取流不同,将getErrorStream换成getInputStream就好了 java调用cmd命令 标签:info throws rms man for 阻塞 eth 线程 get 原文地址:https://www.cnblogs.com/wang-liang-blogs/p/11022869.htmlProcess p = Runtime.getRuntime().exec(cmd);
public static boolean runCMD(String cmd) throws IOException, InterruptedException {
final String METHOD_NAME = "runCMD";
Process p = Runtime.getRuntime().exec(cmd);
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String readLine = br.readLine();
StringBuilder builder = new StringBuilder();
while (readLine != null) {
readLine = br.readLine();
builder.append(readLine);
}
logger.debug(METHOD_NAME + "#readLine: " + builder.toString());
p.waitFor();
int i = p.exitValue();
logger.info(METHOD_NAME + "#exitValue = " + i);
if (i == 0) {
return true;
} else {
return false;
}
} catch (IOException e) {
logger.error(METHOD_NAME + "#ErrMsg=" + e.getMessage());
e.printStackTrace();
throw e;
} finally {
if (br != null) {
br.close();
}
}
}
public static boolean runCMD(String cmd) throws IOException, InterruptedException {
final String METHOD_NAME = "runCMD";
// Process p = Runtime.getRuntime().exec("cmd.exe /C " + cmd);
Process p = Runtime.getRuntime().exec(cmd);
BufferedReader br = null;
try {
// br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String readLine = br.readLine();
StringBuilder builder = new StringBuilder();
while (readLine != null) {
readLine = br.readLine();
builder.append(readLine);
}
logger.debug(METHOD_NAME + "#readLine: " + builder.toString());
p.waitFor();
int i = p.exitValue();
logger.info(METHOD_NAME + "#exitValue = " + i);
if (i == 0) {
return true;
} else {
return false;
}
} catch (IOException e) {
logger.error(METHOD_NAME + "#ErrMsg=" + e.getMessage());
e.printStackTrace();
throw e;
} finally {
if (br != null) {
br.close();
}
}
}