文章詳情頁(yè)
使用ProcessBuilder調(diào)用外部命令,并返回大量結(jié)果
瀏覽:94日期:2024-07-19 08:19:14
內(nèi)容: 在網(wǎng)上常見(jiàn)的用Java調(diào)用外部命令返回結(jié)果的方法是: 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這樣不能馬上返回結(jié)果的命令來(lái)說(shuō)是無(wú)效的,不僅得不到返回結(jié)果,進(jìn)程也會(huì)終止。其原因是,process在沒(méi)有來(lái)得及gegtInputStream是,調(diào)用了BufferedReader.readLine其返回結(jié)果是null,也就是說(shuō)循環(huán)一開(kāi)始就會(huì)停止。因此想要正常運(yùn)行只能直接讀取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:MyProjectcolimasaxis_c'); System.out.println(result); }catch ( IOException ex ){ ex.printStackTrace(); } }}經(jīng)過(guò)測(cè)試,本方法可以運(yùn)行返回大量結(jié)果的應(yīng)用程序。我的blog:http://blog.csdn.net/tyrone1979 Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd 在網(wǎng)上常見(jiàn)的用Java調(diào)用外部命令返回結(jié)果的方法是: process =runtime
相關(guān)文章:
1. SpringBoot返回統(tǒng)一的JSON標(biāo)準(zhǔn)格式實(shí)現(xiàn)步驟2. 詳談ajax返回?cái)?shù)據(jù)成功 卻進(jìn)入error的方法3. vue等兩個(gè)接口都返回結(jié)果再執(zhí)行下一步的實(shí)例4. python pymysql鏈接數(shù)據(jù)庫(kù)查詢結(jié)果轉(zhuǎn)為Dataframe實(shí)例5. Python接口測(cè)試結(jié)果集實(shí)現(xiàn)封裝比較6. 解決python 執(zhí)行shell命令無(wú)法獲取返回值的問(wèn)題7. Java Map.get()返回指定鍵所映射的值8. 剖析Android Activity側(cè)滑返回的實(shí)現(xiàn)原理9. vue監(jiān)聽(tīng)瀏覽器原生返回按鈕,進(jìn)行路由轉(zhuǎn)跳操作10. vue實(shí)現(xiàn)移動(dòng)端返回頂部
排行榜
