java调用cmd命令方法:http://walsh.iteye.com/blog/449051
来源:互联网 发布:js弹出框返回主菜单 编辑:程序博客网 时间:2024/06/16 18:59
写这篇博客的出发点是为了回答JavaEye问答频道上面的一个问题,是问如何用Java来调用Windows上的wmic命令来获取系统中当前的进程信息。我的第一印象是用Runtime.exec()肯定是可以的,但一写就发现,事情并没有那么的简单。我又找到了一篇比较老的文章,仔细阅读,才明白了其中的细节。下面是一些要点:
- 等待命令执行结束用waitFor(),其返回值就是命令的返回值。
- 如果出现程序执行被挂起,没有任何反应的情况,是由于没有读取命令子进程的正常输出流或错误输出流导致缓冲区被占满,进程被锁住。这个时候需要把输出流中的内容给读出来。最好的做法是使用两个线程,分别同时读取正常输出流和错误输出流。
- 执行Windows平台上的命令时使用cmd.exe /C,如cmd.exe /C dir。
- 记得关闭命令子进程的输出流,通过Process.getOutputStream().close(),这样不会导致命令子进程被锁住。
仿照上面文章中,写了一个简单的例子。
package cmd;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;class StreamDrainer implements Runnable {private InputStream ins;public StreamDrainer(InputStream ins) {this.ins = ins;}public void run() {try {BufferedReader reader = new BufferedReader(new InputStreamReader(ins));String line = null;while ((line = reader.readLine()) != null) {System.out.println(line);}} catch (Exception e) {e.printStackTrace();}}}public class TestRunCmd {public static void main(String[] args) {String[] cmd = new String[] { "cmd.exe", "/C", "wmic process get name" };try {Process process = Runtime.getRuntime().exec(cmd);new Thread(new StreamDrainer(process.getInputStream())).start();new Thread(new StreamDrainer(process.getErrorStream())).start();process.getOutputStream().close();int exitValue = process.waitFor();System.out.println("返回值:" + exitValue);} catch (Exception e) {e.printStackTrace();}}}
我自己也写了一段代码,在此记录:
public static void execJava(String name) {<span style="white-space:pre"></span>String cmd = "java -jar D:/businessfolder/test/PntInBusinessArea.jar D:/businessfolder/test/shangquan.geojson D:/1/"+name+".txt D:/1/result/"+name+".txt";<span style="white-space:pre"></span>//String[] cmd = new String[] { "cmd.exe", "/C", "java -jar D:/businessfolder/test/PntInBusinessArea.jar D:/businessfolder/test/shangquan.geojson D:/1/崇文门.txt D:/1/result/崇文门.txt" };<span style="white-space:pre"></span>try {<span style="white-space:pre"></span>Process process = Runtime.getRuntime().exec("cmd.exe /C "+cmd);<span style="white-space:pre"></span><span style="white-space:pre"></span>new Thread(new Practice(process.getInputStream())).start();<span style="white-space:pre"></span>new Thread(new Practice(process.getErrorStream())).start();<span style="white-space:pre"></span><span style="white-space:pre"></span>process.getOutputStream().close();<span style="white-space:pre"></span>int exitValue = process.waitFor();<span style="white-space:pre"></span>if(exitValue!=0){<span style="white-space:pre"></span>System.out.println("返回值:" + exitValue+name);<span style="white-space:pre"></span>}<span style="white-space:pre"></span><span style="white-space:pre"></span>} catch (Exception e) {<span style="white-space:pre"></span>e.printStackTrace();<span style="white-space:pre"></span>}}
0 0
- java调用cmd命令方法:http://walsh.iteye.com/blog/449051
- C++调用JAVA方法详解_____转载自http://public0821.iteye.com/blog/423941
- java 反射调用类的方法 http://weiliuhong1.iteye.com/blog/1222381
- 利用Java生成静态HMTL页面的方法----------转自http://playfish.iteye.com/blog/150386
- java 注释规范:http://cetus.iteye.com/blog/1110280
- java垃圾回收--转载http://qiang106.iteye.com/blog/571182
- java 多线程 http://heipark.iteye.com/blog/1156011
- http://beautyhunter.iteye.com/blog/892585
- http://sunwei-07.iteye.com/blog/1139814
- http://fuliang.iteye.com/blog/69313
- http://yueguc.iteye.com/blog/836964
- http://mountain-king.iteye.com/blog/715651
- http://zmx.iteye.com/blog/810138
- http://icyfenix.iteye.com/blog/1119214
- http://xubaolin9.iteye.com/blog/720846
- http://zhousheng193.iteye.com/blog/966912
- http://andy136566.iteye.com/blog/856161
- http://zmm0422.iteye.com/blog/326540
- RDLC8.0 报表完美解决方案
- 我的新机器配置列表(每次换电脑或者装机都可能更新)windows版..
- 一个计算机专业学生几年的Java编程经验汇总
- 重新打开Eclipse出现java.lang.NullPointerException的问题解决
- php5.3之命名空间
- java调用cmd命令方法:http://walsh.iteye.com/blog/449051
- ios网址保留
- JAVA 验证码生成。SimpleCaptcha
- poj1087(题意难懂)
- Linux-lsof的用法
- 数据挖掘、机器学习和模式识别关系与区别
- Android高效加载大图、多图解决方案,有效避免程序OOM
- 机器学习之&&Aprior与FP Growth
- Android 中的对话框实现方式