使用JAVA調(diào)用應(yīng)用程序_第1頁
使用JAVA調(diào)用應(yīng)用程序_第2頁
使用JAVA調(diào)用應(yīng)用程序_第3頁
使用JAVA調(diào)用應(yīng)用程序_第4頁
使用JAVA調(diào)用應(yīng)用程序_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

使用JAVA調(diào)用應(yīng)用程序用Java編寫應(yīng)用時(shí),有時(shí)需要在程序中調(diào)用另一個(gè)現(xiàn)成的可執(zhí)行程序或系統(tǒng)命令,這時(shí)可以通過組合使用Java提供的Runtime類和Process類的方法實(shí)現(xiàn)。下面是一種比較典型的程序模式:.??Processprocess=Runtime?getRuntime().exec("?\\p?exe");process.waitfOr();???在上面的程序中,第一行的“.\\p?exe”是要執(zhí)行的程序名,Runtime.getRuntime()返回當(dāng)前應(yīng)用程序的Runtime對(duì)象,該對(duì)象的execO方法指示Java虛擬機(jī)創(chuàng)建一個(gè)子進(jìn)程執(zhí)行指定的可執(zhí)行程序,并返回與該子進(jìn)程對(duì)應(yīng)的Process對(duì)象實(shí)例。通過Process可以控制該子進(jìn)程的執(zhí)行或獲取該子進(jìn)程的信息。第二條語句的目的等待子進(jìn)程完成再往下執(zhí)行。但在windows平臺(tái)上,如果處理不當(dāng),有時(shí)并不能得到預(yù)期的結(jié)果。下面是筆者在實(shí)際編程中總結(jié)的幾種需要注意的情況:1、執(zhí)行DOS的內(nèi)部命令如果要執(zhí)行一條DOS內(nèi)部命令,有兩種方法。一種方法是把命令解釋器包含在exec()的參數(shù)中。例如,執(zhí)行dir命令,在NT上,可寫成exec("cmd.exe/cdir"),在windows95/98下,可寫成“command.exe/cdir”,其中參數(shù)“/c”表示命令執(zhí)行后關(guān)閉Dos立即關(guān)閉窗口。另一種方法是,把內(nèi)部命令放在一個(gè)批命令my_dir.bat文件中,在Java程序中寫成exec("my_dir.bat")。如果僅僅寫成exec("dir"),Java虛擬機(jī)則會(huì)報(bào)運(yùn)行時(shí)錯(cuò)誤。前一種方法要保證程序的可移植性,需要在程序中讀取運(yùn)行的操作系統(tǒng)平臺(tái),以調(diào)用不同的命令解釋器。后一種方法則不需要做更多的處理。2、打開一個(gè)不可執(zhí)行的文件打開一個(gè)不可執(zhí)行的文件,但該文件存在關(guān)聯(lián)的應(yīng)用程序,則可以有兩種方式。以打開一個(gè)word文檔a.doc文件為例,Java中可以有以下兩種寫法:exec("start.Wa.doc");exec("c:WProgramFilesWMicrosoftOffice\\office\\winword.exe.\\a.doc");顯然,前一種方法更為簡捷方便。exec("3、執(zhí)行一個(gè)有標(biāo)準(zhǔn)輸出的DOS可執(zhí)行程序在windows平臺(tái)上,運(yùn)行被調(diào)用程序的DOS窗口在程序執(zhí)行完畢后往往并不會(huì)自動(dòng)關(guān)閉,從而導(dǎo)致Java應(yīng)用程序阻塞在waitfor()。導(dǎo)致該現(xiàn)象的一個(gè)可能的原因是,該可執(zhí)行程序的標(biāo)準(zhǔn)輸出比較多,而運(yùn)行窗口的標(biāo)準(zhǔn)輸出緩沖區(qū)不夠大。解決的辦法是,利用Java提供的Process類提供的方法讓Java虛擬機(jī)截獲被調(diào)用程序的DOS運(yùn)行窗口的標(biāo)準(zhǔn)輸出,在waitfor()命令之前讀出窗口的標(biāo)準(zhǔn)輸出緩沖區(qū)中的內(nèi)容。程序模型如下:.??Stringls_1;Processprocess=Runtime.getRuntime().exec("cmd/cdir\\windows");BufferedReaderbufferedReader=newBufferedReader(\newInputStreamReader(process.getInputStream());while((ls_1=bufferedReader.readLine())!=null)System.out.println(ls_1);process.waitfor();???程序事例1:以下代碼在windows2000上可以運(yùn)新哦。SayHi.exe為任意的一個(gè)執(zhí)行程序。publicstaticvoidmain(Stringargs[]){Strings=null;//systemcommandtorunStringcmd="cmd/cc:/SayHi.exe";//settheworkingdirectoryfortheOScommandprocessorFileworkDir=newFile("c:\\");try{Processp=Runtime.getRuntime().exec(cmd,null,workDir);inti=p.waitFor();if(i==0){BufferedReaderstdInput=newBufferedReader(newInputStreamReader(p.getInputStream()));//readtheoutputfromthecommandwhile((s=stdInput.readLine())!=null){System.out.println(s);}else{BufferedReaderstdErr=newBufferedReader(newInputStreamReader(p.getErrorStream()));//readtheoutputfromthecommandwhile((s=stdErr.readLine())!=null){System.out.println(s);}catch(Exceptione){System.out.println(e);}}程序事例2:packagetest;publicclassTestCmd{publicTestCmd(){}//在項(xiàng)目下建立一個(gè)名為hello的文件夾publicstaticvoidmain(String[]args){System.ou匕println(System.getProperty("user.dir"));createFolder("hello");}privatestaticvoidcreateFolder(StringfolderName){Stringtemp=System.getProperty("user.dir")+java.io.File.separator+folderName;java.io.Filef=newjava.io.File(temp);f.mkdirs();在Java程序中獲取當(dāng)前運(yùn)行程序的路徑importjava.io.*;publicclassTest{publicstaticvoidmain(String[]args){Filedirectory=newFile(".”);try{FilenewPath=newFile(directory.getCanonicalPath()+"NewFolder");newPath.mkdir();}catch(Exceptionexp)exp.printStackTrace();//Filedirectory=newFile(".");//directory.getCanonicalPath();取得當(dāng)前路徑在Jsp頁面中調(diào)用Ping命令PingIP.jsp<%@pagelanguage="javaHcontentType="text/html;charset=gb2312"import="java.io.*"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//ENn“/TR/html4/loose.dtd"><html><head><title>PingIP測(cè)試頁面</title></head><body><divalign="center"><h2>PingIP測(cè)試頁面</^></div><%Runtimeruntime=Runtime.getRuntime();Processprocess=null;Stringline=null;InputStreamis=null;InputStreamReaderisr=null;BufferedReaderbr=null;Stringip="";〃待Ping的地址try{process=runtime.exec("ping"+ip);is=process.getInputStream();isr=newInputStreamReader(is);br=newBufferedReader(isr);out.println("<pre>");

while((linebr.readLine())null){out.println(line);out.flush();}out.println("</pre>n);is.close();isr.close();while((linebr.readLine())}catch(IOExceptione){out.println(e);runtime.exit(1);}%></body></html>程序事例3:try{Runtimert=Runtime.getRuntime();//Stringcommand="ping-c5localhost";//Stringcommand="perl-le'print\"Hello,world!'"'";Stringcommand="perl-v";out.println("command:<br/>");out.println(command+"<br/>");Processprocess=rt.exec(command);InputStreamin=process.getInputStream();InputStreamReaderisr=newInputStreamReader(in);BufferedReaderbr=newBufferedReader(isr);Stringline;StringBuffersb=newStringBuffer();while((line=br.readLine())!=null){sb.append(line);sb.append("<br/>”);in.close();isr.close();br.close();process.w

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論