java.lang.Object java.io.Console
此类包含多个方法,可访问与当前 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, ' '); }
方法摘要 | |
---|---|
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 |
方法详细信息 |
---|
public PrintWriter writer()
PrintWriter
对象。
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')、回车后紧跟换行,或者流末尾。
public Console format(String fmt, Object... args)
fmt
-
格式字符串语法中描述的格式字符串
args
- 格式字符串中的格式说明符引用的参数。如果参数多于格式说明符,则忽略额外的参数。参数的数量是可变的,并且可以为零。参数的最大数量受到
Java 虚拟机规范定义的 Java 数组最大维数的限制。
null 参数的行为取决于
转换。
IllegalFormatException
- 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、对给定格式字符串而言不够的参数或其他非法条件。有关所有可能的格式错误的规范,请参阅 formatter 类规范的
详细信息部分。
public Console printf(String format, Object... args)
此方法 con.printf(format, args) 形式的调用与以下调用的行为完全相同:
con.format(format, args).
format
-
格式字符串语法中描述的格式字符串。
args
- 格式字符串中的格式说明符引用的参数。如果参数多于格式说明符,则忽略额外的参数。参数的数量是可变的,并且可以为零。参数的最大数量受到
Java 虚拟机规范定义的 Java 数组最大维数的限制。
null 参数的行为取决于
转换。
IllegalFormatException
- 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、对给定格式字符串而言不够的参数或其他非法条件。有关所有可能的格式错误的规范,请参阅 formatter 类规范的
详细信息部分。
public String readLine(String fmt, Object... args)
fmt
-
格式字符串语法中描述的格式字符串。
args
- 格式字符串中的格式说明符引用的参数。如果参数多于格式说明符,则忽略额外的参数。参数的最大数量受到
Java 虚拟机规范定义的 Java 数组最大维数的限制。
IllegalFormatException
- 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、对给定格式字符串而言不够的参数或其他非法条件。有关所有可能的格式错误的规范,请参阅 formatter 类规范的
详细信息部分。
IOError
- 如果发生 I/O 错误。
public String readLine()
IOError
- 如果发生 I/O 错误。
public char[] readPassword(String fmt, Object... args)
fmt
- 提示文本的
格式字符串语法中描述的格式字符串。
args
- 格式字符串中的格式说明符引用的参数。如果参数多于格式说明符,则忽略额外的参数。参数的最大数量受到
Java 虚拟机规范定义的 Java 数组最大维数的限制。
IllegalFormatException
- 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、对给定格式字符串而言不够的参数或其他非法条件。有关所有可能的格式错误的规范,请参阅 formatter 类规范的
详细信息部分。
IOError
- 如果发生 I/O 错误。
public char[] readPassword()
IOError
- 如果发生 I/O 错误。
public void flush()