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