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


猜你喜欢
- 目前很多网页都有滑动验证,目的就是防止不良爬虫扒他们网站的数据,我这次本着学习的目的使用Java和selenium学习解决滑动验证的问题,前
- 本文实例讲述了Android开发中计算器的sin、cos及tan值计算问题。分享给大家供大家参考,具体如下:接到一个需求 :要求计算器sin
- 本文实例为大家分享了banner轮播图无限轮播效果的具体代码,供大家参考,具体内容如下效果展示第一步(权限配置)<uses-permi
- application.ymlspring: datasource: username: root password
- 本文实例讲述了C#实现将汉字转化为2位大写的16进制Unicode的方法。分享给大家供大家参考。具体实现方法如下:说明:str.ToStri
- 最近研究了一下android摄像头开发相关的技术,也看了Google提供的Camera2Basic调用示例,以及网上一部分代码,但都是在Te
- 最近做的一个小东西遇到这样的情况,我从一个页面MainActivity修改一些内容,需要跳转到一个新的EditActivity去做修改操作,
- 1、包装类型是什么?Java 为每一个基本数据类型都引入了对应的包装类型,int 的包装类就是 Integer,从 Java 5 开始引入了
- 一 :问题背景问题:当查询接口较复杂时候,数据的获取都需要[远程调用],必然需要花费更多的时间。 假如查询文章详情页面,需要如下标注的时间才
- 本文实例为大家分享了利用Swing绘制一个动态时钟的具体代码,供大家参考,具体内容如下效果代码在下面,可跳过解析。前言编程实现一个时钟利用S
- 由于springboot常用war包部署,改为cloud开发模式多端口情况下,部署反而不习惯毕竟,war包要不要项目名访问都必须放在tomc
- 本文主要介绍了idea中同一SpringBoot项目多端口启动,具体如下:现在已经有一个在跑着使用的默认端口 8080选中1,点击2.这个时
- 目录:1.list中添加,获取,删除元素;2.list中是否包含某个元素;3.list中根据索引将元素数值改变(替换);4.list中查看(
- 1.构建springboot项目2.打包应用3.编写dockerfile4.构建镜像5.发布运行![root@localhost demo]
- 1.简介其实这个效果几天之前就写了,但是一直没有更新博客,本来想着把芝麻分雷达图也做好再发博客的,然后今天看到鸿洋的微信公众号有朋友发了芝麻
- 本文实例讲述了C#创建windows系统用户的方法。分享给大家供大家参考。具体如下:下面的代码可以通过c#创建一个windows的本地系统账
- 目的了解ReentrantLock获取锁、释放锁的流程代码package com.company.aqs;import java.util.
- 实践过程pdf转excelpublic static long pdfToExcel(String inFile, String outFi
- 1 概述Java虚拟机把描述类的数据从Class文件加载到内存, 并对数据进行校验、转化解析和初始化,最终形成可以被虚拟机直接使用的Java
- 在C#中,@符号不仅可以加在字符串常量之前,使字符串不作转义之用,还可以加在变量名之前,使变量名与关键字不冲突,这种用法称为“逐字标识符”。