模块 java.base
 java.io

类 Console

java.lang.Object
java.io.Console
所有已实现的接口:
Flushable

public 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 参数传递给此类中的任何方法都将导致抛出 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 - 格式化字符串语法 中描述的格式字符串
      args - 格式字符串中格式说明符引用的参数。如果参数多于格式说明符,则忽略多余的参数。参数的数量是可变的,可以为零。参数的最大数量受限于 Java 数组的最大维度,如定义的那样Java 虚拟机规范null 参数的行为取决于 转换
      返回:
      这个控制台
      抛出:
      IllegalFormatException - 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、给定格式字符串的参数不足或其他非法条件。有关所有可能的格式错误的规范,请参阅格式化程序类规范的细节部分。
    • printf

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

      调用 con.printf(format, args) 形式的方法的行为与调用

      con.format(format, args)
      .
      参数:
      format - 格式字符串,如 格式化字符串语法 中所述。
      args - 格式字符串中格式说明符引用的参数。如果参数多于格式说明符,则忽略多余的参数。参数的数量是可变的,可以为零。参数的最大数量受限于 Java 数组的最大维度,如定义的那样Java 虚拟机规范null 参数的行为取决于 转换
      返回:
      这个控制台
      抛出:
      IllegalFormatException - 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、给定格式字符串的参数不足或其他非法条件。有关所有可能的格式错误的规范,请参阅格式化程序类规范的细节部分。
    • readLine

      public String  readLine(String  fmt, Object ... args)
      提供格式化提示,然后从控制台读取单行文本。
      参数:
      fmt - 格式字符串,如 格式化字符串语法 中所述。
      args - 格式字符串中格式说明符引用的参数。如果参数多于格式说明符,则忽略多余的参数。参数的最大数量受限于 Java 数组的最大维度,如定义的那样Java 虚拟机规范.
      返回:
      包含从控制台读取的行的字符串,不包括任何行终止字符,如果已到达流的末尾,则为 null
      抛出:
      IllegalFormatException - 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、给定格式字符串的参数不足或其他非法条件。有关所有可能的格式错误的规范,请参阅格式化程序类规范的细节部分。
      IOError - 如果发生 I/O 错误。
    • readLine

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

      public char[] readPassword(String  fmt, Object ... args)
      提供格式化的提示,然后在禁用回显的情况下从控制台读取密码或密码。
      参数:
      fmt - 格式字符串,如 格式化字符串语法 中所述,用于提示文本。
      args - 格式字符串中格式说明符引用的参数。如果参数多于格式说明符,则忽略多余的参数。参数的最大数量受限于 Java 数组的最大维度,如定义的那样Java 虚拟机规范.
      返回:
      包含从控制台读取的密码或密码的字符数组,不包括任何行终止字符,或者如果已到达流结尾则为 null
      抛出:
      IllegalFormatException - 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、给定格式字符串的参数不足或其他非法条件。有关所有可能的格式错误的规范,请参阅格式化程序类规范的细节部分。
      IOError - 如果发生 I/O 错误。
    • readPassword

      public char[] readPassword()
      在禁用回显的情况下从控制台读取密码或密码短语
      返回:
      包含从控制台读取的密码或密码的字符数组,不包括任何行终止字符,或者如果已到达流结尾则为 null
      抛出:
      IOError - 如果发生 I/O 错误。
    • flush

      public void flush()
      刷新控制台并强制立即写入任何缓冲输出。
      指定者:
      flush 在接口 Flushable
    • charset

      public Charset  charset()
      返回用于 ConsoleCharset 对象。

      返回的字符集对应于主机环境或用户指定的输入和输出源(例如,键盘和/或显示器)。它不一定与从 Charset.defaultCharset() 返回的默认字符集相同。

      返回:
      用于 ConsoleCharset 对象
      自从:
      17