java怎么运行系统命令?java清屏代码的实现!

猿友 2021-07-03 16:55:56 浏览数 (5580)
反馈

python怎么清屏?不同系统如何实现命令行清屏?中,小编介绍了python如何进行清屏的方法。实际上,java要想实现清屏的效果,也需要使用相同的方式(即使用系统提供的清屏函数)。今天小编就来介绍一下java怎么运行cmd命令吧!

java为什么不能直接清屏

其实不止是java,还有python,c语言,大部分语言都没有办法直接清屏,想要清屏就需要调用系统的函数(其实是命令)。因为清屏这个功能需要深入到系统内核进行操作,而普通的java程序是没有办法进入内核的(其实并不是没有,在学习操作系统的相关课程之后就知道如何让java程序进入内核态)。简单的来说,操作系统分为用户态和内核态,而清屏的功能只有内核态可以实现,java程序只是用户态,所以它无法实现清屏,只能通过内核提供的命令来进行清屏。

 关于用户态和内核态的知识其实对于初学java的程序员来说不需要掌握太多,只需要知道java没有直接清屏的功能就行了。

如何实现java的清屏

实现java的清屏其实和python使用的是同样的方法,java也提供了相关的包可以让java去使用cmd命令。接下来我们来介绍一下java如何调用cmd命令。

java调用cmd命令实例

以下是一个java调用cmd的ping命令的案例,具体代码介绍已经写在注释里了。

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

public class cmd{
    public static void main(String[] args) {
        String command = "ping www.w3cschool.cn";//要输入的命令的字符串
        try {//使用命令的过程可能会出现失败,需要捕获异常
            Process process = Runtime.getRuntime().exec(command);
            //使用process可以执行命令
            process.waitFor();
            // 导致当前线程等待,如有必要,一直要等到由该 Process对象表示的进程已经终止。
            //如果已终止该子进程,此方法立即返回。
            //如果没有终止该子进程,调用的线程将被阻塞,直到退出子进程。
            //根据惯例,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("状态值为:" + process.exitValue()); // 输出命令的返回值(执行状态,0为成功)
        } catch (Exception e) {
            
            e.printStackTrace();
        }
    }
}

从上面的代码可以学习到,使用process的​Runtime.getRuntime().exec(command)​就可以执行cmd的命令,但是如果要看到cmd命令返回的结果,需要使用process.getInputStream()​ 来获取cmd的输出流。

进阶版process

上面版本的process是一种比较简单的执行命令提示符的方法,但这种方法小编用来实现清屏的时候却出现了差错。但是,他的进阶版——processbuilder就没有这样的问题,接下来我们采用processbuilder进行清屏代码的实现:

public class cmd{
    public static void main(String[] args) {
        System.out.println("打印一些无用的内容");
        System.out.println("打印一些无用的内容");
        System.out.println("打印一些无用的内容");
        System.out.println("打印一些无用的内容");
        System.out.println("打印一些无用的内容");
        try {//使用命令的过程可能会出现失败,需要捕获异常
         //   Process process = Runtime.getRuntime().exec("cls");
         new ProcessBuilder("cmd", "/c", "cls")
         // 将 ProcessBuilder 对象的输出管道和 Java 的进程进行关联,这个函数的返回值也是一个
         // ProcessBuilder
         .inheritIO()
         // 开始执行 ProcessBuilder 中的命令
         .start()
         // 等待 ProcessBuilder 中的清屏命令执行完毕
         // 如果不等待则会出现清屏代码后面的输出被清掉的情况
         .waitFor(); // 清屏命令                   
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("现在没有无用内容了,我们来说点重要滴事情");
        System.out.println("学编程,哪家强?互联网上编程狮放光芒");
    }
}

现在代码的运行效果如下:

清屏

这样就实现了清屏的功能了呢。

 据坊间传闻,eclipse执行上述代码并不能清屏,小编没有尝试过(但是IDEA上试验确实不能清屏),但小编在VSCode中和使用命令行编译运行的时候是能实现清屏的。所以使用此方法不能清理eclipse和IDEA上的控制台,小伙伴们要是需要清屏还需要另找其他的办法。

小结

以上就是关于java怎么运行cmd命令的全部内容了,更多java学习请关注java编程狮


0 人点赞