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指令(支持多次手工输入)的更多相关文章

  1. java调用cmd执行maven命令

    一.原理介绍 Java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令. cmd /c dir 是执行完dir命令后封闭命令窗口. cmd /k di ...

  2. Java调用CMD命令

    java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令. cmd /c dir 是执行完dir命令后关闭命令窗口. cmd /k dir 是执行完d ...

  3. Java调用cmd命令 打开一个站点

    使用Java程序打开一个站点 近期做了个东西使用SWT技术在一个client程序 须要升级时在提示升级 点击窗口上的一个连接 打开下载网页 花费了我非常长时间 用到了把它记录下来  怕是忘记,须要时能 ...

  4. Java 调用cmd.exe命令

    原理:java的Runtime.getRuntime().exec(commandText)可以调用执行cmd指令. cmd /c dir 是执行完dir命令后关闭命令窗口. cmd /k dir 是 ...

  5. Java调用cmd压缩文件

    今天在做一个java调用windows的压缩命令时遇到一奇怪问题代码如下: String cmd ="C:/Program Files (x86)/WinRAR/rar.exe a c:/t ...

  6. Spark(四十四):使用Java调用spark-submit.sh(支持 --deploy-mode client和cluster两种方式)并获取applicationId

    之前也介绍过使用yarn api来submit spark任务,通过提交接口返回applicationId的用法,具体参考<Spark2.3(四十):如何使用java通过yarn api调度sp ...

  7. java调用cmd命令删除文件夹及其所有内容

    /** * *删除D盘下面test目录,感觉以前用io流遍历删除好慢! * **/ public static void main(String[] args) { Runtime run = Run ...

  8. java 调用cmd命令

    public class Port{ public static void main(String[] args) { Runtime runtime=Runtime.getRuntime(); tr ...

  9. Java调用windows命令

    JAVA调用windows的cmd命令 用起来会让程序变得更加简洁明了,非常实用. 核心就是使用 Runtime类. cmd的xcopy就有很强大的文件夹,文件处理功能. 下面就以xcopy来说明,如 ...

随机推荐

  1. oracl遇到的问题

    使用oracl数据库用  ALTER TABLE Students ADD CONSTRAINT PRINF_NAME_UNIQUE UNIQUE (sname) 添加唯一性约束,出现问题,报错为:a ...

  2. Tomcat的三种安装方式:解压版、安装版、配置成Windows服务版

    https://blog.csdn.net/Jessica_XLF/article/details/81711429

  3. iOS内置麦克风选择方法

    模式中的 voicechat用于VoIP是由系统进行默认选择的最适合的麦克风 模式中的AVAudioSessionModeVideoRecording默认选择上麦克风,离摄像头最近的那个,主要用于VO ...

  4. SQL查询中连接--学习

    一.开头说 不出意外,还是先说下SQL中所有的联接类型: 内连接.外连接(左连接.右连接 .全连接).交叉连接 然后接下来就是依次学习下各种连接的使用效果 二.各种连接秀 首先准备两张表   学生表: ...

  5. 51单片机学习笔记(清翔版)(13)——LED点阵、74HC595

    如图3,点阵屏分单色和彩色,点阵屏是由许多点组成的,在一个点上,只有一颗一种颜色的灯珠,这就是单色点阵屏,彩色的在一个点上有三颗灯珠,分别是RGB三原色. 图4你可能没看出来,那么大块黄色的就是点阵屏 ...

  6. Spring基础篇——Spring的AOP切面编程

    一  基本理解 AOP,面向切面编程,作为Spring的核心思想之一,度娘上有太多的教程啊.解释啊,但博主还是要自己按照自己的思路和理解再来阐释一下.原因很简单,别人的思想终究是别人的,自己的理解才是 ...

  7. VSCode 常用快捷键

    快捷键 基础编辑 快捷键 作用 Ctrl+X 剪切 Ctrl+C 复制 Ctrl+Shift+K 删除当前行 Ctrl+Enter 在当前行之后插入一行 Ctrl+Shift+Enter 在当前行之前 ...

  8. nginx学习笔记(一)

    agentzh 的 Nginx 教程 学习笔记 nginx的变量 Nginx 变量一旦创建,其变量名的可见范围就是整个 Nginx 配置,甚至可以跨越不同虚拟主机的 server 配置块, 例子如下 ...

  9. ionic3问题记录

    1.Ionic3 websocket 启动没问题,编译的时候报错 events.js:136thrower;// Unhandled 'error' event^Error: read ECONNRE ...

  10. vue+elementUI表格列显示隐藏遇到bug

    在最近的项目中,有需求要做到根据字段显示列,原来以为简单的v-if可以解决. 在开发的过程中遇到问题, <el-table ref="multipleTable" :data ...