public final class Console extends Object implements Flushable
虚拟机是否具有控制台取决于底层平台以及虚拟机的调用方式。 如果虚拟机从交互式命令行启动,而不重定向标准输入和输出流,则其控制台将存在,并且通常将连接到启动虚拟机的键盘和显示器。 如果虚拟机是自动启动的,例如由后台作业调度程序启动,则通常不具有控制台。
如果这个虚拟机有一个控制台,那么它由一个这个类的唯一实例表示,可以通过调用System.console()
方法获得。 如果没有控制台设备可用,则该方法的调用将返回null 。
读取和写入操作是同步的,以保证关键操作的原子完成; 因此调用方法readLine()
, readPassword()
, format()
, printf()
以及读,格式和写在由返回的对象的操作reader()
和writer()
在多线程方案可能阻塞。
对reader()
和writer()
返回的对象调用close()将不会关闭这些对象的基础流。
当达到控制台输入流的结尾时,控制台读取方法返回null ,例如在Windows上通过在Unix或control-Z上键入control-D。 如果以后在控制台的输入设备上输入其他字符,后续读取操作将成功。
除非另有说明,否则传递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, ' '); }
Modifier and Type | Method and Description |
---|---|
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 对象。
|
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)
对返回的对象不会超出开往每次调用行字符读,即使目标缓冲区有更多字符的空间。 Reader
的read
方法可能会阻止在控制台的输入设备上没有输入或到达行界限。 行边界被认为是换行符( '\n' ),回车( '\r' )中的任何一个,紧接着换行的回车符或流结束。
public Console format(String fmt, Object... args)
fmt
- Format string syntax中
描述的格式字符串
args
- 格式字符串中格式说明符引用的参数。
如果比格式说明符更多的参数,额外的参数将被忽略。
参数的数量是可变的,可能为零。
参数的最大数量受限于The Java™ Virtual Machine Specification定义的Java数组的最大维度 。
null参数的行为取决于conversion 。
IllegalFormatException
- 如果格式字符串包含非法语法,与给定参数不兼容的格式说明符,给定格式字符串的参数不足或其他非法条件。
有关所有可能的格式化错误的规范 ,请参阅格式化程序类规范的Details部分。
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
- 如果格式字符串包含非法语法,则与给定参数不兼容的格式说明符,给定格式字符串的参数不足或其他非法条件。
有关所有可能的格式化错误的规范 ,请参阅格式化程序类规范的Details部分。
public String readLine(String fmt, Object... args)
fmt
- Format string syntax中
描述的格式字符串。
args
- 格式字符串中格式说明符引用的参数。
如果比格式说明符更多的参数,额外的参数将被忽略。
参数的最大数量受限于The Java™ Virtual Machine Specification定义的Java数组的最大维数 。
IllegalFormatException
- 如果格式字符串包含非法语法,则与给定参数不兼容的格式说明符,给定格式字符串的参数不足或其他非法条件。
有关所有可能的格式化错误的规范 ,请参阅格式化程序类规范的Details部分。
IOError
- 如果发生I / O错误。
public String readLine()
IOError
- 如果发生I / O错误。
public char[] readPassword(String fmt, Object... args)
fmt
-如在描述的格式字符串
Format string syntax的提示文本。
args
- 格式字符串中格式说明符引用的参数。
如果比格式说明符更多的参数,额外的参数将被忽略。
参数的最大数量受到The Java™ Virtual Machine Specification定义的Java数组的最大维度的限制 。
IllegalFormatException
- 如果格式字符串包含非法语法,与给定参数不兼容的格式说明符,给定格式字符串的参数不足或其他非法条件。
有关所有可能的格式化错误的规范 ,请参阅格式化程序类规范的Details部分。
IOError
- 如果发生I / O错误。
public char[] readPassword()
IOError
- 如果发生I / O错误。