java通過Runtime和Process類調用外部命令


還有許多地方未理解,僅供參考,后續待完善。

參考:https://www.cnblogs.com/xxpal/articles/824963.html

舉例:

Process process;
process = Runtime.getRuntime().exec(
                    "cmd /c tasklist|findStr \"Manager\"");
            try {
                InputStream inputStream = process.getInputStream();
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(inputStream));
                while ((line = reader.readLine()) != null) {
                    Log.info(line);
                    lines=lines+line;
                }

                process.waitFor();
            
            } catch (Exception e) {
                // TODO: handle exception
                Log.info("查找Manager進程失敗");
                Log.info(e.getMessage());
                lines="查找Manager進程是否存在失敗";
            }

Runtime.getRuntime().exec()方法主要用於執行外部的程序或命令

Runtime.getRuntime()返回當前應用程序的Runtime對象,該對象的exec()方法指示Java虛擬機創建一個子進程執行指定的可執行程序,並返回與該子進程對應的Process對象實例。通過Process可以控制該子進程的執行或獲取該子進程的信息。

通過Process的getInputStream(),getOutputStream()和getErrorStream()方法可以得到輸入輸出流,然后通過InputStream可以得到程序對控制台的輸出信息,通過OutputStream可以給程序輸入指令,這樣就達到了程序的交換功能。

在Windows平台上,運行被調用程序的DOS窗口在程序執行完畢后往往並不會自動關閉,從而導致Java應用程序阻塞在waitfor()語句。導致該現象的一個可能的原因是,該可執行程序的標准輸出比較多,而運行窗口的標准輸出緩沖區不夠大。解決的辦法是,利用Java中Process類提供的方法讓Java虛擬機截獲被調用程序的DOS運行窗口的標准輸出,在waitfor()命令之前讀出窗口的標准輸出緩沖區中的內容。舉例:

InputStream inputStream = process.getInputStream(); BufferedReader reader = new BufferedReader( new InputStreamReader(inputStream)); while ((line = reader.readLine()) != null) { Log.info(line); lines=lines+line; }

記得在最后要添加process.waitFor();代碼的意思是 線程一直到process結束再往下執行。如果不寫這行代碼,那么process執行的同時,線程在往下執行,后面有可能報錯。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM