java调用cmd命令
Posted wang-liang-blogs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java调用cmd命令相关的知识,希望对你有一定的参考价值。
1.使用Runtime中exec(String command)方法执行cmd命令,如下:
Process p = Runtime.getRuntime().exec(cmd);
此方法会抛出IOException,但是在项目中遇到没有出现异常,命令也没有执行的情况。
2.此方法可以达到大多的cmd调用的期望结果,但有些时候回出现命令卡死在p.waitFor();上,造成线程阻塞,原因:https://blog.csdn.net/weixin_34408624/article/details/86015882
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();
3.使用以下方法不会出现和2一样情况下得阻塞的问题,与2的区别就是获取流不同,将getErrorStream换成getInputStream就好了
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();
以上是关于java调用cmd命令的主要内容,如果未能解决你的问题,请参考以下文章
java 程序如何调用cmd调用java.exe 来运行.class文件