模块  java.base
软件包  java.io

Class Console

  • 实现的所有接口
    Flushable

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

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

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

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

    reader()writer()返回的对象上调用close()将不会关闭这些对象的基础流。

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

    除非另有说明,否则将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对象。
        结果
        与此控制台关联的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 - 如果格式字符串包含非法语法,格式说明符与给定参数不兼容,给定格式字符串的参数不足或其他非法条件。 有关所有可能的格式错误的说明,请参阅formatter类规范的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 - 如果格式字符串包含非法语法,格式说明符与给定参数不兼容,给定格式字符串的参数不足或其他非法条件。 有关所有可能的格式错误的说明,请参阅formatter类规范的Details部分。
      • readLine

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

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

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