java调用Dos命令
来源:互联网 发布:哪些平台可以做淘宝客 编辑:程序博客网 时间:2024/05/27 12:21
比如我在工程文件夹下放了一个svm-train.exe的文件
这个exe文件调用后有输出信息。我很想知道这个exe调用过程中到底发生了什么事情。
在java中这样写
Runtime run = Runtime.getRuntime();
Process child = null;
InputStream is = null;
File env = new File(System.getProperty("user.dir"));
child = run.exec(cmd,null,env);
这个env是用于找到工程的当前目录,相当于进入Dos后先cd到目录,cmd就是你在dos窗口那里打的命令。
run.exec(cmd,null,env);这句就开始执行了。并创建一个Process给child
网上有很多代码有这句:
while(true)
{
if(child.waitFor() == 0)
{
break;
}
}
但是注意如果进入 if(child.waitFor() == 0)
那这个程序就会卡死在这里,直到exe进程结束。这样如果你的exe会运行很长时间,那么在这段时间内就不能打印任何输出信息。
全代码如下:
- private static boolean CallSVM(String cmd)
- {
- Runtime run = Runtime.getRuntime();
- Process child = null;
- InputStream is = null;
- try
- {
- File env = new File(System.getProperty("user.dir"));
- child = run.exec(cmd,null,env);
- String out = null;
- // nomal process
- is = child.getInputStream();
- FileWriter fw = new FileWriter(env.getAbsolutePath()+"//log.txt");
- BufferedReader br = new BufferedReader(new InputStreamReader(is));
- while((out = br.readLine())!=null)
- {
- fw.write(out+"/r/n");
- System.out.println(out);
- }
- while(true)
- {
- if(child.waitFor() == 0)
- {
- break;
- }
- }
- fw.write("-----------------/r/n");
- fw.close();
- br.close();
- }
- catch(IOException ioe)
- {
- System.err.println("cmd error:"+cmd);
- System.err.println(ioe.getMessage());
- return false;
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- if(child != null)
- child.destroy();
- e.printStackTrace();
- }
- return true;
- }
这里一定要输出放前,waitFor放后
while((out = br.readLine())!=null)
{
fw.write(out+"/r/n");
System.out.println(out);
}
while(true)
{
if(child.waitFor() == 0)
{
break;
}
}
另外程序在执行过程中while((out = br.readLine())!=null)这里也会卡住,所以不用担心,调用的dos程序还没有输出,就已经执行到waitFor()那里去了。
- Java调用DOS命令
- JAVA调用DOS命令
- java调用dos命令
- java调用Dos命令
- Java调用dos命令
- java调用dos命令
- Java调用DOS命令
- java调用dos命令
- java 调用DOS命令
- java调用dos命令
- Java 调用dos命令
- JAVA如何调用DOS命令
- JAVA如何调用DOS命令
- JAVA如何调用DOS命令
- JAVA如何调用DOS命令
- JAVA如何调用DOS命令
- JAVA如何调用DOS命令
- JAVA如何调用DOS命令
- String and some of the difference between StringBuffer
- PLSQL基础
- 实现站点与IE8或更高版本的兼容性
- extjs多行下拉框(combobox)
- 关于Ext使用过程中的两个问题处理
- java调用Dos命令
- 控件组
- malloc后,再free 却出错
- Spring的AOP使用xml配置
- python, sqlobject(mysql)中文显示问题
- .Net CLR Hosting原理及实践 (ZZ)
- Oracle触发器
- oracle number类型 p、s参数说明
- 字符串比较与运算符