想在java虛擬機(jī)調(diào)用外部程序 第一個(gè)想到的應(yīng)是java.lang.runtime 然后利用runtime.exec方法得到PRocess進(jìn)程 但是這個(gè)方法有很多坑,例如不及時(shí)讀取緩沖中的數(shù)據(jù)時(shí),就會(huì)掛死
后來發(fā)現(xiàn)了apache.commons.executor這個(gè)類 他在內(nèi)部已經(jīng)做好了足夠的準(zhǔn)備 至少不會(huì)發(fā)生掛死的情況
import org.apache.commons.exec.CommandLine;import org.apache.commons.exec.DefaultExecutor;import org.apache.commons.exec.PumpStreamHandler;//CommandLine command = CommandLine.parse("echo 123456789"); 和下面的是一樣的CommandLine command = new CommandLine("echo");command.addArgument("1234");DefaultExecutor executor = new DefaultExecutor();// 如果需要讀取輸出,則需要設(shè)置下列步驟ByteArrayOutputStream outputStream = new ByteArrayOutputStream();PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream); executor.setStreamHandler(streamHandler); // 如果需要在其他目錄下工作,需要設(shè)置以下兩步File workingDirectory = new File("/home/user/")executor.setWorkingDirectory(workingDirectory);try { executor.execute(commandLine);} catch (final IOException e) { e.printStackTrace();}System.out.println(outputStream.toString());// 讀取輸出上述程序?qū)?huì)輸出1234
,值得注意的是,如果不設(shè)置streamHandler,程序會(huì)自動(dòng)輸出到console
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注