在python怎么清屏?不同系統(tǒng)如何實(shí)現(xiàn)命令行清屏?中,小編介紹了python如何進(jìn)行清屏的方法。實(shí)際上,java要想實(shí)現(xiàn)清屏的效果,也需要使用相同的方式(即使用系統(tǒng)提供的清屏函數(shù))。今天小編就來介紹一下java怎么運(yùn)行cmd命令吧!
java為什么不能直接清屏
其實(shí)不止是java,還有python,c語言,大部分語言都沒有辦法直接清屏,想要清屏就需要調(diào)用系統(tǒng)的函數(shù)(其實(shí)是命令)。因?yàn)榍迤吝@個功能需要深入到系統(tǒng)內(nèi)核進(jìn)行操作,而普通的java程序是沒有辦法進(jìn)入內(nèi)核的(其實(shí)并不是沒有,在學(xué)習(xí)操作系統(tǒng)的相關(guān)課程之后就知道如何讓java程序進(jìn)入內(nèi)核態(tài))。簡單的來說,操作系統(tǒng)分為用戶態(tài)和內(nèi)核態(tài),而清屏的功能只有內(nèi)核態(tài)可以實(shí)現(xiàn),java程序只是用戶態(tài),所以它無法實(shí)現(xiàn)清屏,只能通過內(nèi)核提供的命令來進(jìn)行清屏。
關(guān)于用戶態(tài)和內(nèi)核態(tài)的知識其實(shí)對于初學(xué)java的程序員來說不需要掌握太多,只需要知道java沒有直接清屏的功能就行了。
如何實(shí)現(xiàn)java的清屏
實(shí)現(xiàn)java的清屏其實(shí)和python使用的是同樣的方法,java也提供了相關(guān)的包可以讓java去使用cmd命令。接下來我們來介紹一下java如何調(diào)用cmd命令。
java調(diào)用cmd命令實(shí)例
以下是一個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 m.hgci.cn";//要輸入的命令的字符串
try {//使用命令的過程可能會出現(xiàn)失敗,需要捕獲異常
Process process = Runtime.getRuntime().exec(command);
//使用process可以執(zhí)行命令
process.waitFor();
// 導(dǎo)致當(dāng)前線程等待,如有必要,一直要等到由該 Process對象表示的進(jìn)程已經(jīng)終止。
//如果已終止該子進(jìn)程,此方法立即返回。
//如果沒有終止該子進(jìn)程,調(diào)用的線程將被阻塞,直到退出子進(jìn)程。
//根據(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();
}
}
}
從上面的代碼可以學(xué)習(xí)到,使用process的?Runtime.getRuntime().exec(command)
?就可以執(zhí)行cmd的命令,但是如果要看到cmd命令返回的結(jié)果,需要使用process.getInputStream()
? 來獲取cmd的輸出流。
進(jìn)階版process
上面版本的process是一種比較簡單的執(zhí)行命令提示符的方法,但這種方法小編用來實(shí)現(xiàn)清屏的時(shí)候卻出現(xiàn)了差錯。但是,他的進(jìn)階版——processbuilder就沒有這樣的問題,接下來我們采用processbuilder進(jìn)行清屏代碼的實(shí)現(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 的進(jìn)程進(jìn)行關(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)容了,我們來說點(diǎn)重要滴事情");
System.out.println("學(xué)編程,哪家強(qiáng)?互聯(lián)網(wǎng)上編程獅放光芒");
}
}
現(xiàn)在代碼的運(yùn)行效果如下:
這樣就實(shí)現(xiàn)了清屏的功能了呢。
據(jù)坊間傳聞,eclipse執(zhí)行上述代碼并不能清屏,小編沒有嘗試過(但是IDEA上試驗(yàn)確實(shí)不能清屏),但小編在VSCode中和使用命令行編譯運(yùn)行的時(shí)候是能實(shí)現(xiàn)清屏的。所以使用此方法不能清理eclipse和IDEA上的控制臺,小伙伴們要是需要清屏還需要另找其他的辦法。
小結(jié)
以上就是關(guān)于java怎么運(yùn)行cmd命令的全部內(nèi)容了,更多java學(xué)習(xí)請關(guān)注java編程獅。