使用ProcessBuilder调用外部命令,并返回大量结果

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

在网上常见的用Java调用外部命令返回结果的方法是:

process =runtime.exec(cmd)

is = process.getInputStream();

isr=new InputStreamReader(is);

br =new BufferedReader(isr);

while( (line = br.readLine()) != null )

{

out.println(line);

out.flush();

}

这种方法在遇到像cvs checkout modules这样不能马上返回结果的命令来说是无效的,不仅得不到返回结果,进程也会终止。其原因是,process在没有来得及gegtInputStream是,调用了BufferedReader.readLine其返回结果是null,也就是说循环一开始就会停止。因此想要正常运行只能直接读取process.getInputStream(),如下:

import java.io.*;

/**

*

* @author tyrone

*

*/

public class CMDExecute

{

/**

* @param cmd

* @return

* @throws IOException

*/

public synchronized String run(String[] cmd,String workdirectory) throws IOException{

String line=null;

String result="";

try {

ProcessBuilder builder = new ProcessBuilder(cmd);

//set working directory

if (workdirectory!=null)

builder.directory(new File(workdirectory));

builder.redirectErrorStream(true);

Process process = builder.start();

InputStream in=process.getInputStream();

byte[] re=new byte[1024];

while (in.read(re)!= -1) {

System.out.println(new String(re));

result = result + new String(re);

}

in.close();

} catch (Exception ex) {

ex.printStackTrace();

}

return result;

}

/**

* @param args=cvs log */

public static void main(String[] args){

String result=null;

CMDExecute cmdexe=new CMDExecute();

try {

result= cmdexe.run(args,"D:\\MyProject\\colimas\\axis_c");

System.out.println(result);

}catch ( IOException ex ){

ex.printStackTrace();

}

}

}

经过测试,本方法可以运行返回大量结果的应用程序。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航