为什么要使用java.io.Console?

10

这里是一个简短的问题。

相比使用封装了System.inInputStreamReaderBufferedReader,使用 java.io.Console 有什么好处呢?

我为什么要使用它?

谢谢任何建议!

6个回答

10

因为已经有为你编写好的代码,所以不需要重复发明轮子。很有可能,你无法比它更好。


那是真的!所以你是在说我不应该为每个项目开发自己的链表泛型类型吗?! :P - Humphrey Bogart

9

您可以使用java.io.Console来向用户呈现交互式命令行。您自己可以使用System.in完成所有操作,但是您需要实现一些诸如注意输入何时完成、readPassword等功能。


2
删除字符?这不是由系统控制台自己执行的吗? - OscarRyz
2
如果你在 System.in 周围使用 BufferedReader,那么你就不需要 "注意" 字符的擦除或任何其他相关的事情。然而,readPassword 是使用 Console 的一个很好的理由。 - Chochos
2
谢谢大家,你们说得对。我已经删除了有关擦除字符的部分。 - Jared Oberhaus

6

请查看java.io.Console终于来了!

近年来,J2SE最受欢迎的功能之一是改进控制台支持并提供禁用回显输入密码的方法。开发者们将这个功能请求标识为4050435,并且它已经在Top 25 RFEs列表中潜伏了一段时间。


存档链接:https://web.archive.org/web/20111005173512/https://blogs.oracle.com/alanb/entry/java_io_console_is_finally(请注意,这是一个标题,没有正文内容需要翻译) - Mathieu K.

3

只有在不重定向STDIN/STDOUT的情况下从命令行启动Java程序时,java.io.Console才有效。

我认为Console相比System.in的主要优点是它具有readPassword()方法,该方法不会回显用户键入的字符(我找不到使用System.in实现此功能的方法)。

您还可以使用readLine()方法显示提示并读取单行,无需创建自己的LineNumberReader。

但是,如果您希望Java程序能够在从文件或管道重定向STDIN时读取数据,则仍然必须使用System.in。


2

我还知道一个小技巧,Console无法做到——我创建了自己的输入输出流,并用它们替换了System.in/out。我的流实现可以将内容追加到日志文件中,并在屏幕上回显。

当我打开“调试信息”时,甚至可以让它告诉我sysout来自哪个程序/行(不过这样效率会慢些。它会创建一个异常并检查相应的堆栈条目,因此默认情况下是关闭的)


-2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接