Java控制台应用程序:System.out还有可行吗?
使用System.out
(和相关的)总是看起来很尴尬,因为公共领域和现在最新的Netbeans给出了一个明显的“声明应删除”提示。
因此我的问题是: System.out
仍然是写入控制台的首选方式,还是应该首选的其他API?
编辑:我不想将其用于日志记录,而是用于简单的控制台应用程序。 类似ps
东西ps
正在运行的进程输出到控制台。
在一个旨在从命令行运行的命令中,(IMO)使用System.out
和System.err
进行输出和运行命令的人可以合理地期望理解的错误消息是合理的。 如果从正常的shell或脚本运行应用程序, System.out
和/或System.err
流可能会重定向到文件或管道中的其他进程。 AFAIK,使用System.out
和System.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