如何用cmd查看java信息_java如何用cmd命令

java如何用cmd命令的方法:1、使用Runtime中【exec(String command)】方法执行cmd命令;2、先将执行的cmd命令写入到文件中后再执行,这是如果执行错误日志可以打印,线程也不会卡死。

df90655b9657fd665f718254d2175451.png

【相关学习推荐:java基础教程】

java如何用cmd命令的方法:

1.使用Runtime中exec(String command)方法执行cmd命令,如下:Process p = Runtime.getRuntime().exec(cmd);

此方法会抛出IOException,但是在项目中遇到没有出现异常,命令也没有执行的情况。

2.此方法可以达到大多的cmd调用的期望结果,但有些时候回出现命令卡死在p.waitFor();上,造成线程阻塞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();

}

}

}

4.对于3方法有个缺点是执行错误时无法将错误消息打印出来,还有一个方法是先将执行的cmd命令写入到文件中后再执行,这是如果执行错误日志可以打印,线程也不会卡死。

a.将执行的命名写入到文件中。FileUtils.javapublic static boolean writeFile(File exportFile, final String content) {

if (exportFile == null || StringUtils.isEmpty(content)) {

return false;

}

if (!exportFile.exists()) {

try {

exportFile.getParentFile().mkdirs();

exportFile.createNewFile();

} catch (IOException e) {

e.printStackTrace();

logger.error("create local json file exception: " + e.getMessage());

return false;

}

}

BufferedWriter bufferedWriter = null;

try {

FileOutputStream os = new FileOutputStream(exportFile);

FileDescriptor fd = os.getFD();

bufferedWriter = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));

bufferedWriter.write(content);

//Flush the data from the streams and writes into system buffers

//The data may or may not be written to disk.

bufferedWriter.flush();

//block until the system buffers have been written to disk.

//After this method returns, the data is guaranteed to have

//been written to disk.

fd.sync();

} catch (UnsupportedEncodingException e) {

logger.error("saveDBData#catch an UnsupportedEncodingException (" + e.getMessage() + ")");

return false;

} catch (FileNotFoundException e) {

logger.error("saveDBData#catch an FileNotFoundException (" + e.getMessage() + ")");

return false;

} catch (IOException e) {

logger.error("saveDBData#catch an IOException (" + e.getMessage() + ")");

return false;

} catch (Exception e) {

logger.error("saveDBData#catch an exception (" + e.getMessage() + ")");

return false;

} finally {

try {

if (bufferedWriter != null) {

bufferedWriter.close();

bufferedWriter = null;

}

} catch (IOException e) {

logger.error("writeJsonToFile#catch an exception (" + e.getMessage() + ")");

}

}

return true;

}

b.执行命令public static boolean excuteCMDBatFile(String cmd) {

final String METHOD_NAME = "excuteCMDBatFile#";

boolean result = true;

Process p;

File batFile = new File("D:/test/cmd.bat");

System.out.println(batFile.getAbsolutePath());

boolean isSuccess = FileUtils.writeFile(batFile, cmd);

if(!isSuccess) {

logger.error(METHOD_NAME + "write cmd to File failed.");

return false;

}

String batFilePath = "\"" + MigrateContants.CMD_BAT_FILE + "\"";

logger.info("cmd path:" + batFilePath);

try {

p = Runtime.getRuntime().exec(batFilePath);

InputStream fis = p.getErrorStream();//p.getInputStream();

InputStreamReader isr = new InputStreamReader(fis, System.getProperty("file.encoding"));

BufferedReader br = new BufferedReader(isr);

String line = null;

StringBuilder builder = new StringBuilder();

while ((line = br.readLine()) != null) {

builder.append(line);

}

p.waitFor();

int i = p.exitValue();

logger.info(METHOD_NAME + "exitValue = " + i);

if (i != 0) {

result = false;

logger.error(METHOD_NAME + "excute cmd failed, [result = " + result + ", error message = " + builder.toString() + "]");

System.out.println(METHOD_NAME + "excute cmd failed, [result = " + result + ", error message = " + builder.toString() + "]");

}else {

// logger.debug(METHOD_NAME + "excute cmd result = " + result);

System.out.println(METHOD_NAME + "result = " + result);

}

} catch (Exception e) {

result = false;

e.printStackTrace();

logger.error(METHOD_NAME + "fail to excute bat File [ErrMsg=" + e.getMessage() + "]");

}

return result;

}相关学习推荐:编程视频

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值