现在的位置: 首页 > 综合 > 正文

JAVA 控制台清屏

2018年05月22日 ⁄ 综合 ⁄ 共 1339字 ⁄ 字号 评论关闭

看到网上有人讨论Java如何实现对控制台清屏,看到的内容不是很理想。所以把这些内容总结一下。

直观一点,先看下代码吧

import static java.lang.System.out;
/**
 * Build by netbeans
 * @author Felix Wu
 */
public class ConsleRewriteTest {
    public static void main(String[] agrs) {
        out.print(          "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa" );
        pause();
        out.print( "/r" + "                                                         " );
        
        int total = 100;
        for( int i=1; i<total; i++ ) {
            pause();
            out.print( "/r" + i + "/"+total  );
        }
    }

    private static void pause() {
        try {
            Thread.sleep(1000L);
        } catch (InterruptedException e) {
            //Swallow this exception
        }
    }
}

严格上说控制台是Java进程的输出设备。在Java中对应System.out流,对这个流而言你只能向其中输入内容。那么Java程序怎么和他控制台通讯呢?

方式一:通过ASCII码的控制字符'/r'.

            '/r'表示回车,就回到行首。'/n'表示换行,即移到下一行(光标垂直下移,如果光标在原行的第n个字符位置,那么就下移到下一行的第n个字符位置)。那么"/r/n"表示回车换行,即移到下一行的行首。

            注意上面对'/r'和'/n'的解释是ASCII码标准含义。但是不同的软件对'/n'解释不尽相同。比如按照ASCII码的标准解释回车换行是"/r/n",而UNIX为了节约存储空间,其API在保存采用ASCII编码的文本时用'/n'替代"/r/n",相应的在读取显示时'/n'效果等效于"/r/n"。简而言之,在UNIX的API中'/n'的意思是回车换行("/r/n")而不是标准的换行。JVM也采用了这个风格。但是在Windows系统中其API采用了'/n'的标准本意。对'/n'的不同解释,造成了同样的文本在不同的软件中的显示效果不相同。

方式二:和输出设备通讯.

            这个方式我没有尝试过,不过用JNI可以实现。输出设备可能是软件(比如常见的控制台窗口),也可能是硬件。如果是软件的话,Java程序和此软件通讯,让其清屏(提供此功能的情况下)。如果是硬件可以和驱动通讯让其清屏(提供此功能的情况下)。

对应上面给的例子,不要直接在NB6.8中运行,因为NB6.8的控制台没有解析'/r'控制字符,这应该是其一个bug。在window上可以直接在cmd中运行。

抱歉!评论已关闭.