- 所有已实现的接口:
Flushable
虚拟机是否有控制台取决于底层平台以及调用虚拟机的方式。如果虚拟机是从交互式命令行启动的,而没有重定向标准输入和输出流,那么它的控制台将存在,并且通常会连接到启动虚拟机的键盘和显示器。如果虚拟机是自动启动的,例如通过后台作业调度程序,那么它可能没有控制台。
如果此虚拟机有控制台,则它由此类的唯一实例表示,可以通过调用 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
-
方法总结
修饰符和类型方法描述charset()返回用于Console的Charset对象。voidflush()刷新控制台并强制立即写入任何缓冲输出。使用指定的格式字符串和参数将格式化字符串写入此控制台的输出流。使用指定的格式字符串和参数将格式化字符串写入此控制台的输出流的便捷方法。reader()检索与此控制台关联的唯一Reader对象。readLine()从控制台读取一行文本。提供格式化提示,然后从控制台读取单行文本。char[]在禁用回显的情况下从控制台读取密码或密码短语char[]readPassword(String fmt, Object... args) 提供格式化的提示,然后在禁用回显的情况下从控制台读取密码或密码。writer()检索与此控制台关联的唯一PrintWriter对象。
-
方法详情
-
writer
检索与此控制台关联的唯一PrintWriter对象。- 返回:
- 与此控制台关联的打印器
-
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)不会读入超出每次调用行边界的字符,即使目标缓冲区有空间容纳更多字符。如果未在控制台的输入设备上输入或到达行边界,Reader的read方法可能会阻塞。换行符被认为是换行符 ('\n')、回车符 ('\r')、紧跟换行符的回车符或流结尾中的任何一种。- 返回:
- 与此控制台关联的阅读器
-
format
使用指定的格式字符串和参数将格式化字符串写入此控制台的输出流。- 参数:
fmt- 格式化字符串语法 中描述的格式字符串args- 格式字符串中格式说明符引用的参数。如果参数多于格式说明符,则忽略多余的参数。参数的数量是可变的,可以为零。参数的最大数量受限于 Java 数组的最大维度,如定义的那样Java 虚拟机规范null参数的行为取决于 转换 。- 返回:
- 这个控制台
- 抛出:
IllegalFormatException- 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、给定格式字符串的参数不足或其他非法条件。有关所有可能的格式错误的规范,请参阅格式化程序类规范的细节部分。
-
printf
使用指定的格式字符串和参数将格式化字符串写入此控制台的输出流的便捷方法。调用
con.printf(format, args)形式的方法的行为与调用con.format(format, args)
.- 参数:
format- 格式字符串,如 格式化字符串语法 中所述。args- 格式字符串中格式说明符引用的参数。如果参数多于格式说明符,则忽略多余的参数。参数的数量是可变的,可以为零。参数的最大数量受限于 Java 数组的最大维度,如定义的那样Java 虚拟机规范null参数的行为取决于 转换 。- 返回:
- 这个控制台
- 抛出:
IllegalFormatException- 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、给定格式字符串的参数不足或其他非法条件。有关所有可能的格式错误的规范,请参阅格式化程序类规范的细节部分。
-
readLine
提供格式化提示,然后从控制台读取单行文本。- 参数:
fmt- 格式字符串,如 格式化字符串语法 中所述。args- 格式字符串中格式说明符引用的参数。如果参数多于格式说明符,则忽略多余的参数。参数的最大数量受限于 Java 数组的最大维度,如定义的那样Java 虚拟机规范.- 返回:
-
包含从控制台读取的行的字符串,不包括任何行终止字符,如果已到达流的末尾,则为
null。 - 抛出:
IllegalFormatException- 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、给定格式字符串的参数不足或其他非法条件。有关所有可能的格式错误的规范,请参阅格式化程序类规范的细节部分。IOError- 如果发生 I/O 错误。
-
readLine
从控制台读取一行文本。- 返回:
-
包含从控制台读取的行的字符串,不包括任何行终止字符,如果已到达流的末尾,则为
null。 - 抛出:
IOError- 如果发生 I/O 错误。
-
readPassword
提供格式化的提示,然后在禁用回显的情况下从控制台读取密码或密码。- 参数:
fmt- 格式字符串,如 格式化字符串语法 中所述,用于提示文本。args- 格式字符串中格式说明符引用的参数。如果参数多于格式说明符,则忽略多余的参数。参数的最大数量受限于 Java 数组的最大维度,如定义的那样Java 虚拟机规范.- 返回:
-
包含从控制台读取的密码或密码的字符数组,不包括任何行终止字符,或者如果已到达流结尾则为
null。 - 抛出:
IllegalFormatException- 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、给定格式字符串的参数不足或其他非法条件。有关所有可能的格式错误的规范,请参阅格式化程序类规范的细节部分。IOError- 如果发生 I/O 错误。
-
readPassword
public char[] readPassword()在禁用回显的情况下从控制台读取密码或密码短语- 返回:
-
包含从控制台读取的密码或密码的字符数组,不包括任何行终止字符,或者如果已到达流结尾则为
null。 - 抛出:
IOError- 如果发生 I/O 错误。
-
flush
public void flush()刷新控制台并强制立即写入任何缓冲输出。 -
charset
返回用于Console的Charset对象。返回的字符集对应于主机环境或用户指定的输入和输出源(例如,键盘和/或显示器)。它不一定与从
Charset.defaultCharset()返回的默认字符集相同。- 返回:
-
用于
Console的Charset对象 - 自从:
- 17
-