JavaTM Platform
Standard Ed. 6

java.io
类 Console

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

public final class Console
     
extends Object
implements Flushable

此类包含多个方法,可访问与当前 Java 虚拟机关联的基于字符的控制台设备(如果有)。

虚拟机是否具有控制台取决于底层平台,还取决于调用虚拟机的方式。如果虚拟机从一个交互式命令行开始启动,且没有重定向标准输入和输出流,那么其控制台将存在,并且通常连接到键盘并从虚拟机启动的地方显示。如果虚拟机是自动启动的(例如,由后台作业调度程序启动),那么它通常没有控制台。

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

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

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

在到达控制台输入流的尾部时,如键入 control-D (Unix) 或键入 control-Z (Windows),读取控制台的方法将返回 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

方法摘要
 void flush()
          刷新控制台,并强制立即写入所有缓冲的输出。
 Console format(String fmt, Object... args)
          使用指定格式字符串和参数将格式化字符串写入此控制台的输出流中。
 Console printf(String format, Object... args)
          使用指定格式字符串和参数将格式化字符串写入此控制台输出流的便捷方法。
 Reader reader()
          获取与此控制台关联的唯一 Reader 对象。
 String readLine()
          从控制台读取单行文本。
 String readLine(String fmt, Object... args)
          提供一个格式化提示,然后从控制台读取单行文本。
 char[] readPassword()
          从控制台读取密码,禁用回显。
 char[] readPassword(String fmt, Object... args)
          提供一个格式化提示,然后从控制台读取密码,禁用回显。
 PrintWriter writer()
          获取与此控制台关联的唯一 PrintWriter 对象。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

方法详细信息

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) 不会读入行边界之外的字符,即使目标缓冲区还有可容纳更多字符的空间。下列字符之一被认为是行边界:换行 ('\n')、回车 ('\r')、回车后紧跟换行,或者流末尾。

返回:
与此控制台关联的 reader

format

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

参数:
fmt - 格式字符串语法中描述的格式字符串
args - 格式字符串中的格式说明符引用的参数。如果参数多于格式说明符,则忽略额外的参数。参数的数量是可变的,并且可以为零。参数的最大数量受到 Java 虚拟机规范定义的 Java 数组最大维数的限制。 null 参数的行为取决于 转换
返回:
此控制台
抛出:
IllegalFormatException - 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、对给定格式字符串而言不够的参数或其他非法条件。有关所有可能的格式错误的规范,请参阅 formatter 类规范的 详细信息部分。

printf

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

此方法 con.printf(format, args) 形式的调用与以下调用的行为完全相同:

con.format(format, args)
.

参数:
format - 格式字符串语法中描述的格式字符串。
args - 格式字符串中的格式说明符引用的参数。如果参数多于格式说明符,则忽略额外的参数。参数的数量是可变的,并且可以为零。参数的最大数量受到 Java 虚拟机规范定义的 Java 数组最大维数的限制。 null 参数的行为取决于 转换
返回:
此控制台
抛出:
IllegalFormatException - 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、对给定格式字符串而言不够的参数或其他非法条件。有关所有可能的格式错误的规范,请参阅 formatter 类规范的 详细信息部分。

readLine

public String readLine(String fmt,
                       Object... args)
提供一个格式化提示,然后从控制台读取单行文本。

参数:
fmt - 格式字符串语法中描述的格式字符串。
args - 格式字符串中的格式说明符引用的参数。如果参数多于格式说明符,则忽略额外的参数。参数的最大数量受到 Java 虚拟机规范定义的 Java 数组最大维数的限制。
返回:
包含从控制台读取的行的字符串,该字符串不包含任何行终止符;如果已到达流的末尾,则返回 null
抛出:
IllegalFormatException - 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、对给定格式字符串而言不够的参数或其他非法条件。有关所有可能的格式错误的规范,请参阅 formatter 类规范的 详细信息部分。
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 - 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、对给定格式字符串而言不够的参数或其他非法条件。有关所有可能的格式错误的规范,请参阅 formatter 类规范的 详细信息部分。
IOError - 如果发生 I/O 错误。

readPassword

public char[] readPassword()
从控制台读取密码,禁用回显。

返回:
包含从控制台读取的密码的字符数组,该字符数组不包含任何行终止符;如果已到达流的末尾,则返回 null
抛出:
IOError - 如果发生 I/O 错误。

flush

public void flush()
刷新控制台,并强制立即写入所有缓冲的输出。

指定者:
接口 Flushable 中的 flush

JavaTM Platform
Standard Ed. 6

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策