2010-03-03 25 views
2

使用System.out(和相关)总是显得很笨拙,因为公共领域,现在与最新的Netbeans给出了一个公然的“声明应该被删除”的提示。Java控制台应用程序:System.out仍然是一种可行的方式吗?

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

编辑:我不希望这记录,但一个简单的控制台应用程序。类似于ps,它将正在运行的进程打印到控制台。

回答

8

在被设计成运行的命令从命令行(IMO)合理地使用System.outSystem.err来输出以及运行该命令的人可以合理期望理解的错误消息。如果您使用合适的外壳或脚本运行应用程序,则可能会将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 )可以连接到什么,或
  • 因为控制台窗口埋,或
  • 5月用户不会注意到控制台输出控制台输出最终可能会惹恼用户,特别是如果你的应用程序提供了没办法至压制它。

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

+1

尝试使用java.io.Console的一个问题是,如果你从Eclipse内部运行你的应用程序将无法工作(我怀疑它也在任何IDE内部失败),因为Console类中有一些条件检查。 – SteveD 2010-03-03 10:33:03

5

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

0

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

+0

他想写入控制台。没有人提到日志记录。 – whiskeysierra 2010-03-03 09:07:15

+0

我没有提到日志记录:)通过使用日志框架写入控制台,您给自己增加了灵活性。即使对于简单的控制台应用程序,直接写入System.out也是不灵活的。例如,您可能有一个命令开关来更改输出的位置,或者更改输出级别的选项。 – objects 2010-03-03 09:18:08

+2

好的,但为此目的使用日志框架(如log4j,你提到的)感觉就像黑客 – whiskeysierra 2010-03-03 17:18:41

0

只需使用一个日志框架和而不是在调试级别和在开发环境中使用System.out日志(不生产)设定输出到控制台和日志级别调试

+6

question.contains(“log”)? +1:-1 – whiskeysierra 2010-03-03 09:06:07

+1

我想你的评论是给你downvote周围的其他方法:P – Lombo 2010-03-03 10:09:03

相关问题