Java 执行CMD/DOS

最近在写一个自己的邮箱服务器里用到

监视及起/停 windows 中的服务,调查发现还是得用dos来做这些事情

说一下遭遇战的过程

首先是java里如何执行DOS命令,查到下记函数

Runtime.getRuntime().exec()

(到这你可以试着启动个 记事本 计算器的了Runtime.getRuntime().("notepad"); Runtime.getRuntime().("calc"); )

然后就是准备dos命令

服务启动   sc start "服务名"   

服务停止   sc start "服务名"

服务状态   sc query "服务名"

(引号必须)

然后是返回值的问题了 起/停 的命令执行后是有返回值的

还没发现比较好的对应方案 现在基本上就是把原本打印在 cmd框里的一行行输出出来自己判断

1 private Map<String, String> executeCmd(String cmd) { 2 Runtime rt = Runtime.getRuntime(); // 运行时系统获取 3 Map<String, String> lineMap = new HashMap<String, String>();//存放返回值 4 try { 5 Process proc = rt.exec(cmd);// 执行命令 6 InputStream stderr = proc.getInputStream();//执行结果 得到进程的标准输出信息流 7 InputStreamReader isr = new InputStreamReader(stderr);//将字节流转化成字符流 8 BufferedReader br = new BufferedReader(isr);//将字符流以缓存的形式一行一行输出 9 String line = null; 10 while ((line = br.readLine()) != null) { 11 if (!StringUtils.isEmpty(line)) { 12 String[] strLine = line.split(":"); 13 if(strLine.length>=2) { 14 lineMap.put(strLine[0].trim(), strLine[1].trim()); 15 } 16 17 } 18 } 19 br.close(); 20 isr.close(); 21 stderr.close(); 22 } catch (IOException e) { 23 e.printStackTrace(); 24 } 25 return lineMap; 26 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzgzfz.html