在旨在从命令行运行的命令中,合理使用(IMO)
System.out并
System.err用于输出以及用户可能期望理解的错误消息。如果您从一个不错的shell或脚本中运行应用程序,则
System.outand
/ or
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
)可能没有连接,或者 - 用户可能不会注意到控制台输出,因为控制台窗口被掩埋了1,或者
- 控制台输出可能最终使用户烦恼,尤其是在您的应用程序无法抑制它的情况下。
1-根据控制台输出的性质,这实际上可能恰恰是用户想要的。但是应用程序程序员需要考虑到这一点。



