Java控制台应用程序:System.out还有可行吗?

使用System.out (和相关的)总是看起来很尴尬,因为公共领域和现在最新的Netbeans给出了一个明显的“声明应删除”提示。

因此我的问题是: System.out仍然是写入控制台的首选方式,还是应该首选的其他API?

编辑:我不想将其用于日志记录,而是用于简单的控制台应用程序。 类似ps东西ps正在运行的进程输出到控制台。

在一个旨在从命令行运行的命令中,(IMO)使用System.outSystem.err进行输出和运行命令的人可以合理地期望理解的错误消息是合理的。 如果从正常的shell或脚本运行应用程序, System.out和/或System.err流可能会重定向到文件或管道中的其他进程。 AFAIK,使用System.outSystem.err是“尊重”用户的意愿的唯一方法,就重定向而言。 因此,对于大多数用例,这仍然是命令行应用程序编写输出供用户查看的最佳方式。

在JDK 1.6及更高版本中,还有一个名为java.io.Console的类,它允许您访问控制台。 它没有在Javadoc中拼写出来,但我怀疑java.io.Console打开了一个到控制台的新流,因此无法重定向。 (相当于在旧式UNIX盒子上打开“/ dev / tty”。)IMO,如果你的应用程序想要真正与用户交谈,你应该使用它,而不是重定向的可能性; 例如,要求然后读取密码。

但是,如果您的应用程序是GUI命令,特别是如果它打算作为无人参与服务运行,您应该避免“写入控制台”,因为:

  • 控制台流( System.{out,err}java.io.Console )可能没有连接,或者
  • may用户不会注意到控制台输出,因为控制台窗口被隐藏1或者
  • 控制台输出可能最终会使用户烦恼,特别是如果您的应用程序无法抑制它。

1 – 根据控制台输出的性质,这实际上可能正是用户想要的。 但应用程序员需要考虑到这一点。

是的,主要是出于一个原因:没有其他方法可以写入控制台。 即使您使用日志框架,它最终也会使用System.out

我不建议直接写入控制台。 通过使用log4j(或类似的)框架,您可以配置输出的位置,而无需更改代码。

只需使用日志框架而不是在调试级别使用System.out日志,并在开发环境中(NOT生产)将输出设置为控制台并将loglevel设置为debug