App下載

java怎么運行系統(tǒng)命令?java清屏代碼的實現(xiàn)!

猿友 2021-07-03 16:55:56 瀏覽數(shù) (5288)
反饋

python怎么清屏?不同系統(tǒng)如何實現(xiàn)命令行清屏?中,小編介紹了python如何進行清屏的方法。實際上,java要想實現(xiàn)清屏的效果,也需要使用相同的方式(即使用系統(tǒng)提供的清屏函數(shù))。今天小編就來介紹一下java怎么運行cmd命令吧!

java為什么不能直接清屏

其實不止是java,還有python,c語言,大部分語言都沒有辦法直接清屏,想要清屏就需要調(diào)用系統(tǒng)的函數(shù)(其實是命令)。因為清屏這個功能需要深入到系統(tǒng)內(nèi)核進行操作,而普通的java程序是沒有辦法進入內(nèi)核的(其實并不是沒有,在學習操作系統(tǒng)的相關(guān)課程之后就知道如何讓java程序進入內(nèi)核態(tài))。簡單的來說,操作系統(tǒng)分為用戶態(tài)和內(nèi)核態(tài),而清屏的功能只有內(nèi)核態(tài)可以實現(xiàn),java程序只是用戶態(tài),所以它無法實現(xiàn)清屏,只能通過內(nèi)核提供的命令來進行清屏。

 關(guān)于用戶態(tài)和內(nèi)核態(tài)的知識其實對于初學java的程序員來說不需要掌握太多,只需要知道java沒有直接清屏的功能就行了。

如何實現(xiàn)java的清屏

實現(xiàn)java的清屏其實和python使用的是同樣的方法,java也提供了相關(guān)的包可以讓java去使用cmd命令。接下來我們來介紹一下java如何調(diào)用cmd命令。

java調(diào)用cmd命令實例

以下是一個java調(diào)用cmd的ping命令的案例,具體代碼介紹已經(jīng)寫在注釋里了。

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class cmd{
    public static void main(String[] args) {
        String command = "ping www.o2fo.com";//要輸入的命令的字符串
        try {//使用命令的過程可能會出現(xiàn)失敗,需要捕獲異常
            Process process = Runtime.getRuntime().exec(command);
            //使用process可以執(zhí)行命令
            process.waitFor();
            // 導致當前線程等待,如有必要,一直要等到由該 Process對象表示的進程已經(jīng)終止。
            //如果已終止該子進程,此方法立即返回。
            //如果沒有終止該子進程,調(diào)用的線程將被阻塞,直到退出子進程。
            //根據(jù)慣例,0 表示正常終止
            BufferedReader out = new BufferedReader(
            new InputStreamReader(process.getInputStream(), "GBK")); //獲取命令的輸出流
            String outline = null;
            while ((outline = out.readLine()) != null) {
                System.out.println(outline);
            }//輸出命令的輸出流
            System.out.println("狀態(tài)值為:" + process.exitValue()); // 輸出命令的返回值(執(zhí)行狀態(tài),0為成功)
        } catch (Exception e) {
            
            e.printStackTrace();
        }
    }
}

從上面的代碼可以學習到,使用process的?Runtime.getRuntime().exec(command)?就可以執(zhí)行cmd的命令,但是如果要看到cmd命令返回的結(jié)果,需要使用process.getInputStream()? 來獲取cmd的輸出流。

進階版process

上面版本的process是一種比較簡單的執(zhí)行命令提示符的方法,但這種方法小編用來實現(xiàn)清屏的時候卻出現(xiàn)了差錯。但是,他的進階版——processbuilder就沒有這樣的問題,接下來我們采用processbuilder進行清屏代碼的實現(xiàn):

public class cmd{
    public static void main(String[] args) {
        System.out.println("打印一些無用的內(nèi)容");
        System.out.println("打印一些無用的內(nèi)容");
        System.out.println("打印一些無用的內(nèi)容");
        System.out.println("打印一些無用的內(nèi)容");
        System.out.println("打印一些無用的內(nèi)容");
        try {//使用命令的過程可能會出現(xiàn)失敗,需要捕獲異常
         //   Process process = Runtime.getRuntime().exec("cls");
         new ProcessBuilder("cmd", "/c", "cls")
         // 將 ProcessBuilder 對象的輸出管道和 Java 的進程進行關(guān)聯(lián),這個函數(shù)的返回值也是一個
         // ProcessBuilder
         .inheritIO()
         // 開始執(zhí)行 ProcessBuilder 中的命令
         .start()
         // 等待 ProcessBuilder 中的清屏命令執(zhí)行完畢
         // 如果不等待則會出現(xiàn)清屏代碼后面的輸出被清掉的情況
         .waitFor(); // 清屏命令                   
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("現(xiàn)在沒有無用內(nèi)容了,我們來說點重要滴事情");
        System.out.println("學編程,哪家強?互聯(lián)網(wǎng)上編程獅放光芒");
    }
}

現(xiàn)在代碼的運行效果如下:

清屏

這樣就實現(xiàn)了清屏的功能了呢。

 據(jù)坊間傳聞,eclipse執(zhí)行上述代碼并不能清屏,小編沒有嘗試過(但是IDEA上試驗確實不能清屏),但小編在VSCode中和使用命令行編譯運行的時候是能實現(xiàn)清屏的。所以使用此方法不能清理eclipse和IDEA上的控制臺,小伙伴們要是需要清屏還需要另找其他的辦法。

小結(jié)

以上就是關(guān)于java怎么運行cmd命令的全部內(nèi)容了,更多java學習請關(guān)注java編程獅。


0 人點贊