Module  java.base
软件包  java.io

Class Console

  • All Implemented Interfaces:
    Flushable


    public final class Console
    extends Object
    implements Flushable
    访问与当前Java虚拟机关联的基于字符的控制台设备(如果有的话)的方法。

    虚拟机是否具有控制台取决于底层平台以及虚拟机的调用方式。 如果虚拟机从交互式命令行启动,而不重定向标准输入和输出流,则其控制台将存在,并且通常将连接到启动虚拟机的键盘和显示器。 如果虚拟机是自动启动的,例如由后台作业调度程序启动,则通常不具有控制台。

    如果这个虚拟机有一个控制台,那么它由一个这个类的唯一实例表示,可以通过调用System.console()方法获得。 如果没有控制台设备可用,则该方法的调用将返回null

    读取和写入操作是同步的,以保证关键操作的原子完成; 因此调用方法readLine()readPassword()format()printf()以及读,格式和写在由返回的对象的操作reader()writer()在多线程方案可能阻塞。

    reader()writer()返回的对象调用close()不会关闭这些对象的底层流。

    当达到控制台输入流的结尾时,控制台读取方法返回null ,例如在Windows上通过在Unix或control-Z上键入control-D。 如果以后在控制台的输入设备上输入其他字符,后续读取操作将成功。

    除非另有说明,否则传递null参数到null中的任何方法将导致抛出NullPointerException

    安全注意事项:如果应用程序需要读取密码或其他安全数据,则应使用readPassword()readPassword(String, Object...)并在处理后手动归零返回的字符数组,以最小化内存中敏感数据的生命周期。

    
     Console cons;
     char[] passwd;
     if ((cons = System.console()) != null &&
         (passwd = cons.readPassword("[%s]", "Password:")) != null) {
         ...
         java.util.Arrays.fill(passwd, ' ');
     }
     
    从以下版本开始:
    1.6
    • 方法详细信息

      • writer

        public PrintWriter writer​()
        检索与此控制台关联的唯一的PrintWriter对象。
        结果
        与此控制台关联的打印作者
      • reader

        public Reader reader​()
        检索与此控制台关联的唯一的Reader对象。

        该方法旨在由复杂的应用程序使用,例如, Scanner对象,其利用由Scanner提供的丰富的解析/扫描功能:

         Console con = System.console();
         if (con != null) {
             Scanner sc = new Scanner(con.reader());
             ...
         }
         

        对于仅需要线性读取的简单应用,请使用readLine(java.lang.String, java.lang.Object...)

        批量读取操作read(char[]) read(char[], int, int) read(java.nio.CharBuffer)对返回的对象不会超出开往每次调用行字符读,即使目标缓冲区有更多字符的空间。 如果在控制台的输入设备上没有输入或到达线路绑定,则Readerread方法可能会被阻止。 行界限被认为是换行符( '\n' ),回车( '\r' ),后跟换行的回车符或流结束中的任何一个。

        结果
        阅读器与此控制台关联
      • format

        public Console format​(String fmt,
                              Object... args)
        使用指定的格式字符串和参数将格式化的字符串写入此控制台的输出流。
        参数
        fmt - Format string syntax中描述的格式字符串
        args - 格式字符串中格式说明符引用的参数。 如果比格式说明符更多的参数,额外的参数将被忽略。 参数的数量是可变的,可能为零。 参数的最大数量受限于由The Java™ Virtual Machine Specification定义的Java数组的最大维度。 一个null参数的行为取决于conversion
        结果
        这个控制台
        异常
        IllegalFormatException - 如果格式字符串包含非法语法,则与给定参数不兼容的格式说明符,给定格式字符串的参数不足或其他非法条件。 有关所有可能的格式化错误的规范,请参阅格式化程序类规范的Details部分。
      • printf

        public Console printf​(String format,
                              Object... args)
        使用指定的格式字符串和参数将格式化的字符串写入此控制台的输出流的便利方法。

        对这种con.printf(format, args)形式的方法的调用与调用的方式完全相同

          con.format(format, args) 
        参数
        format -如在描述的格式字符串 Format string syntax
        args - 格式字符串中格式说明符引用的参数。 如果比格式说明符更多的参数,额外的参数将被忽略。 参数的数量是可变的,可能为零。 参数的最大数量受限于The Java™ Virtual Machine Specification定义的Java数组的最大维度。 一个null参数的行为取决于conversion
        结果
        这个控制台
        异常
        IllegalFormatException - 如果格式字符串包含非法语法,则与给定参数不兼容的格式说明符,给定格式字符串的参数不足或其他非法条件。 有关所有可能的格式化错误的规范,请参阅格式化程序类规范的Details部分。
      • readLine

        public String readLine​(String fmt,
                               Object... args)
        提供一个格式化的提示,然后从控制台读取一行文本。
        参数
        fmt -如在描述的格式字符串 Format string syntax
        args - 格式字符串中格式说明符引用的参数。 如果比格式说明符更多的参数,额外的参数将被忽略。 参数的最大数量受限于由The Java™ Virtual Machine Specification定义的Java数组的最大维度。
        结果
        包含从控制台读取的行的字符串,不包括任何行终止字符,如果已达到流结尾, null
        异常
        IllegalFormatException - 如果格式字符串包含非法语法,则与给定参数不兼容的格式说明符,给定格式字符串的参数不足或其他非法条件。 有关所有可能的格式化错误的规范,请参阅格式化程序类规范的Details部分。
        IOError - 如果发生I / O错误。
      • readLine

        public String readLine​()
        从控制台读取一行文本。
        结果
        包含从控制台读取的行的字符串,不包括任何行终止字符,如果已达到流结尾, null
        异常
        IOError - 如果发生I / O错误。
      • readPassword

        public char[] readPassword​(String fmt,
                                   Object... args)
        提供一个格式化的提示,然后从禁用回显的控制台读取密码或密码。
        参数
        fmt - 针对提示文本的 Format string syntax中所述的格式字符串。
        args - 格式字符串中格式说明符引用的参数。 如果比格式说明符更多的参数,额外的参数将被忽略。 参数的最大数量受限于由The Java™ Virtual Machine Specification定义的Java数组的最大维度。
        结果
        包含从控制台读取的密码或密码短语的字符数组,不包括任何行终止字符,如果已达到流的末尾, null
        异常
        IllegalFormatException - 如果格式字符串包含非法语法,则与给定参数不兼容的格式说明符,给定格式字符串的参数不足或其他非法条件。 有关所有可能的格式化错误的规范,请参阅格式化程序类规范的Details部分。
        IOError - 如果发生I / O错误。
      • readPassword

        public char[] readPassword​()
        从禁用回音的控制台读取密码或密码
        结果
        包含从控制台读取的密码或密码短语的字符数组,不包括任何行终止字符,如果已达到流结尾, null
        异常
        IOError - 如果发生I / O错误。
      • flush

        public void flush​()
        刷新控制台并强制任何缓冲输出立即写入。
        Specified by:
        flush在接口 Flushable