JAVA:调用cmd指令(支持多次手工输入)
JDK开发环境:1.8
package com.le.tool; import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.nio.charset.Charset; /**
* java调用cmd指令工具类
*
* @author le.li
*
*/
public class ExecuteUtil {
/**
* 避免乱码,如果没有传入语言编号,默认使用英文437<br>
* D:\>chcp /? 显示或设置活动代码页编号。<br>
* CHCP [nnn]<br>
* nnn 指定代码页编号。<br>
* 不带参数键入 CHCP 以显示活动代码页编号。<br>
*/
private static final String DEFAULT_LANGUAGE_CODE = "437"; /**
* window系统默认语言:GBK
*/
private static final String DEFAULT_LANGUAGE = "GBK"; public static void main(String[] args) {
// executeLink(); // executeCmd("dir ."); // 举例直接把bat文件当cmd指令调用
String cmd = null;
String fileName = "test.bat";
File f = new File(".");
try {
cmd = f.getCanonicalPath() + File.separator + fileName;
} catch (IOException e) {
// e.printStackTrace();
System.err.println("get cmd file error.");
}
executeCmd(cmd);
} /**
* 获取操作系统默认语言
*
* @return String
* @see java虚拟机启动默认的编码(一般和java文件设置格式一致)<br>
* System.out.println(Charset.defaultCharset());<br>
* 查看预置的变量信息:System.getProperties().list(System.out);<br>
* 属性:<br>
* 文件编码:file.encoding<br>
* 系统默认编码sun.jnu.encoding
*/
private static String getsystemLanguage() {
return null == System.getProperty("sun.jnu.encoding") ? DEFAULT_LANGUAGE
: System.getProperty("sun.jnu.encoding");
} /**
* 执行cmd指令
* @param cmd 执行指令
*/
public static void executeCmd(String cmd) {
executeLink(DEFAULT_LANGUAGE_CODE, true, cmd);
} /**
* cmd手工输入交互处理窗口
*/
public static void executeLink() {
executeLink(DEFAULT_LANGUAGE_CODE, false, "");
} /**
* cmd交互处理窗口
*
* @param languageCode 系统语言编码
* @param isOneRun 只执行cmd指令
* @param cmd 执行的指令
* @see 在中文windows系统中,根据编码需要设置编码 chcp 65001 就是换成UTF-8代码页<br>
* chcp 936 可以换回默认的GBK<br>
* chcp 437 是美国英语 <br>
*/
public static void executeLink(String languageCode, boolean isOneRun, String cmd) {
try {
String cmdBin = "cmd";
if (isOneRun) {
cmdBin = "cmd /c ";
}
Process process = Runtime.getRuntime().exec(cmdBin + cmd);
PrintWriter writer = new PrintWriter(process.getOutputStream());
if (!isOneRun) {
// 此处可以预置交互指令
// writer.println("chcp " + languageCode);
writer.println("echo Hello World.");
writer.flush();
}
CommandThread commandThread = new CommandThread(writer);
commandThread.setName("ExecuteCmdThread");
commandThread.start();
ProcessInputStreamThread inputThread = new ProcessInputStreamThread(process.getInputStream());
ProcessInputStreamThread errorThread = new ProcessInputStreamThread(process.getErrorStream());
inputThread.setName("InputStreamThread");
inputThread.start();
errorThread.setName("ErrorStreamThread");
errorThread.start();
// 即使添加下边的一句也不会使线程结束
// Thread.currentThread().interrupt();
} catch (Exception e) {
e.printStackTrace();
}
} static class CommandThread extends Thread {
PrintWriter writer;
BufferedReader br = null; CommandThread(PrintWriter writer) {
this.writer = writer;
// 避免出现乱码问题,直接使用系统默认的编码格式
br = new BufferedReader(new InputStreamReader(System.in, Charset.forName(getsystemLanguage())));
this.setDaemon(true);
} @Override
public void run() {
try {
String cmd = null;
while ((cmd = br.readLine()) != null) {
writer.println(cmd);
writer.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != writer) {
writer.close();
}
if (null != br) {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
} static class ProcessInputStreamThread extends Thread { InputStream input;
BufferedReader breader = null; ProcessInputStreamThread(InputStream input) {
this.input = input;
// 避免出现乱码问题,直接使用系统默认的编码格式
breader = new BufferedReader(new InputStreamReader(input, Charset.forName(getsystemLanguage())));
} @Override
public void run() {
try {
String str = null;
while ((str = breader.readLine()) != null) {
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != input) {
try {
input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (null != breader) {
try {
breader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
JAVA:调用cmd指令(支持多次手工输入)的更多相关文章
- java调用cmd执行maven命令
一.原理介绍 Java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令. cmd /c dir 是执行完dir命令后封闭命令窗口. cmd /k di ...
- Java调用CMD命令
java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令. cmd /c dir 是执行完dir命令后关闭命令窗口. cmd /k dir 是执行完d ...
- Java调用cmd命令 打开一个站点
使用Java程序打开一个站点 近期做了个东西使用SWT技术在一个client程序 须要升级时在提示升级 点击窗口上的一个连接 打开下载网页 花费了我非常长时间 用到了把它记录下来 怕是忘记,须要时能 ...
- Java 调用cmd.exe命令
原理:java的Runtime.getRuntime().exec(commandText)可以调用执行cmd指令. cmd /c dir 是执行完dir命令后关闭命令窗口. cmd /k dir 是 ...
- Java调用cmd压缩文件
今天在做一个java调用windows的压缩命令时遇到一奇怪问题代码如下: String cmd ="C:/Program Files (x86)/WinRAR/rar.exe a c:/t ...
- Spark(四十四):使用Java调用spark-submit.sh(支持 --deploy-mode client和cluster两种方式)并获取applicationId
之前也介绍过使用yarn api来submit spark任务,通过提交接口返回applicationId的用法,具体参考<Spark2.3(四十):如何使用java通过yarn api调度sp ...
- java调用cmd命令删除文件夹及其所有内容
/** * *删除D盘下面test目录,感觉以前用io流遍历删除好慢! * **/ public static void main(String[] args) { Runtime run = Run ...
- java 调用cmd命令
public class Port{ public static void main(String[] args) { Runtime runtime=Runtime.getRuntime(); tr ...
- Java调用windows命令
JAVA调用windows的cmd命令 用起来会让程序变得更加简洁明了,非常实用. 核心就是使用 Runtime类. cmd的xcopy就有很强大的文件夹,文件处理功能. 下面就以xcopy来说明,如 ...
随机推荐
- 《Go程序设计语言》读书笔记-函数
函数包含连续执行的语句,可以使用代码中通过调用函数来执行他们,函数能够将一个复杂的工作切分成多个更小的模块,使多人写作变得容易.另外,函数对他的使用者隐藏了实现细节.这几方面的特性使得函数成为多数编程 ...
- Go语言编程读书笔记:Go channel(1)
Channel是Go语言在语言级别提供的goroutine间的通信方式.我们可以用channel在两个或多个goroutine之间传递消息.channel是进程内的通信方式,因此通过channel传递 ...
- WebMvcConfigure
https://www.cnblogs.com/cl-rr/p/9632886.html
- MyCP(课下作业,必做)- 20175218
MyCP(课下作业,必做) 1.任务详情 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2 ...
- 贝叶斯分类器,随机森林,梯度下载森林,神经网络相关参数的意义和data leakage
构建的每一颗树的数据都是有放回的随机抽取的(也叫bootstrap),n_estimators参数是你想设置多少颗树,还有就是在进行树的结点分裂的时候,是随机选取一个特征子集,然后找到最佳的分裂标准.
- php 微信自定义分享接口
<?php class JSSDK { private $appId; private $appSecret; public function __construct($appId, $appS ...
- Day3 -4.9!受到毕设的突然袭击,一脸蒙蔽,学习暂时停止,明晚继续
PS:啊啊啊啊,慌张的不行,不详的预感终于爆发了,第二次毕设评图好突然,没办法了,竹径和学习突然搁置,明晚健身/建模/补更Day3,感到崩溃 ————————————————————————————— ...
- python 标准库 glob ,python glob 学习
glob库是最简单的模块之一,内容非常少.用它可以查找符合特定规则的文件路径名.跟使用 windows 下的文件搜索差不多.查找文件只用到三个匹配符: ”*”, 匹配 个或多个字符: “?”, ”?” ...
- MPLAB IDE 细节点问题不定期更新ing
问题1.如何找到MPLAB IDE 隐藏的项目.输出的窗口 答:在菜单栏的 视图 中 “Project”.“Output”. 问题2.mplab c文件为什么不能添加到工程中的source file ...
- 使用串口安装centos操作系统
https://linuxconfig.org/how-to-force-text-mode-installation-of-redhat-linux https://www.centos.org/f ...