Java执行cmd命令的举例与注意事项
作者:康威特冶楼 发布时间:2023-11-03 10:21:05
通常 Java 执行 Windows 或者 Linux 的命令时,都是使用 Runtime.getRuntime.exec(command) 来执行的
eg1: 执行命令
public static void execCommand() {
try {
Runtime runtime = Runtime.getRuntime();
// 打开任务管理器,exec方法调用后返回 Process 进程对象
Process process = runtime.exec("cmd.exe /c taskmgr");
// 等待进程对象执行完成,并返回“退出值”,0 为正常,其他为异常
int exitValue = process.waitFor();
System.out.println("exitValue: " + exitValue);
// 销毁process对象
process.destroy();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
eg2: 执行命令,并获取正常输出与错误输出
public static void execCommandAndGetOutput() {
try {
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("cmd.exe /c ipconfig");
// 输出结果,必须写在 waitFor 之前
String outStr = getStreamStr(process.getInputStream());
// 错误结果,必须写在 waitFor 之前
String errStr = getStreamStr(process.getErrorStream());
int exitValue = process.waitFor(); // 退出值 0 为正常,其他为异常
System.out.println("exitValue: " + exitValue);
System.out.println("outStr: " + outStr);
System.out.println("errStr: " + errStr);
process.destroy();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
public static String getStreamStr(InputStream is) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(is, "GBK"));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
sb.append("\n");
}
br.close();
return sb.toString();
}
process对象可以通过操作数据流,对执行的命令进行参数输入、获取命令输出结果、获取错误结果
getInputStream() | 获取process进程的输出数据 |
---|---|
getOutputStream() | 获取process进程的输入数据 |
getErrorStream() | 获取process进程的错误数据 |
值得注意的是:
getInputStream() 为什么是获取输出数据?getOutputStream()为什么是获取输入数据?这是因为 input 和 output 是__针对当前调用 process 的程序而言的__,即
要获取命令的输出结果,就是被执行命令的结果 输入到我们自己写的程序中,所以用getInputStream()
要往别的程序输入数据,就是我们程序要输出,所以此时用getOutputStream()
附java调用cmd命令实现各种操作
在java编程中,有时候我们只需要使用自己的程序或者调用第三方插件就可以完成一些工作,但是因为个人突发奇想,虽然cmd命令玩的不是很差,但是是否可以直接将命令写到java程序中,在自己的程序中进行对电脑内部的一个控制呢?举个例子可能更方便理解,因为晚上要下载资源文件,但是我又想睡觉,那么电脑一直开着不仅仅对电脑有损耗,而且可能影响我的睡眠质量,虽然我知道cmd的设置关机命令,但是我可以写一个java可执行片段,然后用这个来进行对电脑的定时关机操作,这样以后我如果需要设置关机就可以直接调用自己的程序了,虽然市面上有专门的小工具,但是自己写的东西总会带来一点小傲娇。具体的操作希望大家自行研究,但是要知道cmd命令可以做很多的事情,所以如何合理的在java中使用cmd命令是很有趣的:
public static void main(String[] args) {
/*获取cmd命令*/
try {
Process pro = Runtime.getRuntime().exec("cmd /c calc"); //添加要进行的命令,"cmd /c calc"中calc代表要执行打开计算器,如何设置关机请自己查找cmd命令
BufferedReader br = new BufferedReader(new InputStreamReader(pro
.getInputStream())); //虽然cmd命令可以直接输出,但是通过IO流技术可以保证对数据进行一个缓冲。
String msg = null;
while ((msg = br.readLine()) != null) {
System.out.println(msg);
}
} catch (IOException exception) {
}
/*cmd /c dir 是执行完dir命令后关闭命令窗口
cmd /k dir 是执行完dir命令后不关闭命令窗口
cmd /c start dir 会打开一个新窗口后执行dir命令,原窗口会关闭
cmd /k start dir 会打开一个新窗口后执行dir命令,原窗口不会关闭
cmd /? 查看帮助信息*/
}
在这里要提醒大家的是,cmd命令融合到程序中有时候往往是有些实际用途的,比如我的项目中要求一旦用户做了某种操作就需要关机,那么这就是一种简单的使用。
来源:https://www.cnblogs.com/convict/p/15892263.html
猜你喜欢
- 前言 之前unity5.x在代码中写了debug.log..等等,打
- this可能是几乎所有有一点面向对象思想的语言都会引用到的变量,java自然不例外。只是,this有多少种用法,我也不知道了,让我们来see
- 为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平。你的一个决定会影响团队未来的几年。要考虑方面太多:
- 如下所示:# ===============================================================
- 以下代码为一个工具类package com.imooc.reflect;import java.lang.reflect.Method;pu
- 五一期间原计划是写两篇文章,看一本技术类书籍,结果这五天由于自律性过于差,禁不住各种诱惑,我连电脑都没打开过,计划完美宣告失败。所以在这能看
- 在基于Mybatis-plus实现多租户架构中,介绍了在多租户项目中如果要开启一个子线程,那么需要手动进行RequestAttributes
- java 获取字节码文件的几种方法总结在本文中,以Person类为例,将分别演示获取该类字节码文件的三种方式,其具体思想及代码如下所示:pu
- 一、技术介绍1.chatgpt-java是一个OpenAI的Java版SDK,支持开箱即用。目前以支持官网全部Api。支持最新版本GPT-3
- 前言在电商的应用中,最常见的就是在首页或完成某事件之后,弹出一堆的活动/广告。假如重叠弹出,很丑,给用户的体验也不好,所以一般都会依次依条件
- 一,描写叙述 在多线程下编程的时候。大家可能会遇到一种需求,就是我想在我开启的线程都结束时,同一时候获取
- 1.根据单个分隔字符用split截取例如string st="GT123_1";string[] sArray=st.s
- 本文实例为大家分享了Mybatis分页插件使用的具体代码,供大家参考,具体内容如下1.分页插件简介pagehelper源码都说这是史上最好用
- 目前知道的情况被调用的C/C++函数只能是全局函数 不能调用类中的成员方法被调用的C函数必须使用extern “C“包含,保证采用的导出函数
- 概念代理:为控制A对象,而创建出新B对象,由B对象代替执行A对象所有操作,称之为代理。一个代理体系建立涉及到3个参与角色:真实对象(A),代
- 适配器(Adapter)模式:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一
- 这是一个高级Java面试系列题中的第一部分。这一部分论述了可变参数,断言,垃圾回收,初始化器,令牌化,日期,日历等等Java核心问题。接下来
- Web Services 可以将应用程序转换为网络应用程序。通过使用 Web Services,您的应用程序可以向全世界发布信息,或提供某项
- 一.OO(面向对象)的设计基础面向对象(OO):就是基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性,来认识、
- 前言今天是2021LOL全球总决赛,一直不被大家看好的EDG冲到了决赛对战韩国队的DK,可以说EDG面对如此强大的对手,想赢是比较难的,为了