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

Dan*_*ski 4 java console

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

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

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

Ste*_*n C 11

在设计为从命令行运行的命令中,(IMO)合理地使用System.outSystem.err输出,以及用户可合理期望理解的错误消息.如果从正常的shell或脚本运行应用程序,则可以将System.out和/或System.err流重定向到文件或管道中的其他进程,但这是用户的选择.

在JDK 1.6及更高版本中,java.io.Console您的应用程序可以访问控制台.它没有在Javadoc中拼写出来,但我怀疑它java.io.Console会向控制台打开一个新流,因此无法重定向.(相当于在老式的UNIX机器上打开"/ dev/tty".)如果你的应用程序想要确保它正在与用户交谈,那么你应该只使用它,而不需要重定向; 例如,在请求和读取密码时.

但请注意,这Console不能保证有效.实际上,据观察,当您从Eclipse运行应用程序时,它不起作用......可能还有其他IDE.

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

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

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


Aar*_*lla 5

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