Java如何执行cmd命令
作者:苍穹之跃 发布时间:2022-05-02 09:54:45
标签:Java,cmd,命令
Java执行cmd命令
//当前绝对路径
System.out.println(IoUtil.read(Runtime.getRuntime().exec("cmd /c echo %cd%").getInputStream(), Charset.forName("gbk")));
//创建文件夹
System.out.println(IoUtil.read(Runtime.getRuntime().exec("cmd /c mkdir db").getInputStream(), Charset.forName("gbk")));
System.out.println(IoUtil.read(Runtime.getRuntime().exec("cmd /c cd db").getInputStream(), Charset.forName("gbk")));
//创建文件
System.out.println(IoUtil.read(Runtime.getRuntime().exec("cmd /c type nul>barrier.db").getInputStream(),Charset.forName("gbk")));
Java执行cmd命令总结
java执行cmd命令,主要方法
Process p = Runtime.getRuntime().exec("cmd /c " + cmd命令, null, new File(execFileDir));
解释一下参数
exec方法中参数
参数command:
cmd /c cmd命令 代表执行完cmd命令后cmd 命令窗口关闭
cmd /k cmd命令 代表执行完cmd命令后 cmd窗口继续存在
参数 envp:
envp 为 null,那么子进程会继承当前进程的环境设置。
参数file:
表示当前cmd命令在哪个路径下执行
当执行完cmd命令需要获取到cmd窗口打印信息的时候
InputStream is1 = p.getInputStream()
new Thread(() -> {
BufferedReader br = new BufferedReader(new InputStreamReader(is1, Charset.forName("GBK")));
try {
String outputLine = null;
while ((outputLine = br.readLine()) != null) {
builder.append(outputLine);
}
} catch (IOException e) {
logger.error("获取inputStream打印信息异常", e);
}
}).start();
InputStream is2 = p.getErrorStream();
BufferedReader br2 = new BufferedReader(new InputStreamReader(is2, Charset.forName("GBK")));
StringBuilder buf = new StringBuilder();
String line = null;
while ((line = br2.readLine()) != null) {
buf.append(line);
}
p.waitFor();
使用getInputStream和getErrorStream 获取到输入流, 获取到cmd命令的输出信息
在执行cmd命令的时候有些时候需要继续执行输入y或者n 或者输入密码等参数的时候
暂时使用getOutStream的方式没有实现
可以使用管道的方式实现,
如 echo y| cmd命令
当需要连续输出交互命令参数的时候可以使用echo的重定向
如需要输入两次y的时候
echo y>yy.txt
echo y>>yy.txt
cmd命令<yy.txt
来源:https://blog.csdn.net/wenxingchen/article/details/126264849


猜你喜欢
- //构造文件File类File f=new File(fileName);//判断是否为目录f.isDirectory();//获取目录下的
- 下载 Android SDK,官网:www.android.com 我相信很多人跟我一样,进不去。Android Studio 中文官网 w
- 这个问题属于非常初级的问题,但是对于初学不知道的人可能会比较头疼。C++ 中函数是不能直接返回一个数组的,但是数组其实就是指针,所以可以让函
- 静态数组Java中最基本的数组大家肯定不会陌生:int[] array = new int[6];for (int i = 0; i <
- 本文实例为大家分享了android实现注册登录程序的具体代码,供大家参考,具体内容如 * 册页面:user_register.xml:<
- 存储结构二叉树是一种特殊的树,给个结点最多有两个子节点,并且子节点有左右之分,并且兄弟,父亲,孩子可以很方便的通过编号得到1.在二叉树的第i
- 一. 简介 SQLite数据库是一个轻量级的DBMS(数据库管理系统)。SQLite使用单个文件存储数据,Android标准库包含SQLit
- 一、简介地图控件自v2.3.5版本起,支持多实例,即开发者可以在一个页面中建立多个地图对象,并且针对这些对象分别操作且不会产生相互干扰。文件
- 今天遇到一个问题,原来用的好好的asp网页无法打开,同时inetinfo.exe的CPU占用率很高,几乎达到了100%。看了一下系统错误日志
- 流程如图:MainActivity 跳转至 MainActivity2 再跳转至 MainActivity3MainActivity3跳转至
- 本文实例讲述了C#使用List类实现动态变长数组的方法。分享给大家供大家参考。具体如下:C#中的list可以当做数组使用,而且无需定义长度,
- 给组件加上 * 定义一个类,这个类继承ActionListenerpubulic class ButListener implements
- ActiveMQ 结合 Spring 收发消息直接使用 ActiveMQ 的方式需要重复写很多代码,且不利于管理,Spring 提供了一种更
- 本文实例讲述了Java实现的并发任务处理方法。分享给大家供大家参考,具体如下:public void init() { super.init
- 微信小程序 navigator 跳转url传递参数使用方法说明(1)传值:在navigator的属性url后拼接?id(参数名字
- 简单介绍如果把单链表的最后一个节点的指针指向链表头部,而不是指向NULL,那么就构成了一个单向循环链表,通俗讲就是让尾节点指向头结点。单向环
- 本文实例讲述了Android编程实现将应用强制装到手机内存的方法。分享给大家供大家参考,具体如下:在Froyo(android 2.2,AP
- 什么是状态管理状态管理是一个十分广泛的概念,因为状态无处不在。从广义角度讲状态管理就是页面跟代码、跟服务器进行数据同步。例如:你在某购物应用
- 1. * 在 Spring Boot 可以可以在以下情况执行操作:在将请求发送到控制器之前在将响应发送给客户端之前2. * 使用下面实现
- 一、概要线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就是成为整体的必用方案之一。可以说,使线程