据我所知,out和err都属于同一类
PrintStream
。有人能告诉我它们有什么不同吗?它们是如何改变行为的?PrintStream
。有人能告诉我它们有什么不同吗?它们是如何改变行为的?区别不明显的原因是因为大多数操作系统默认将它们写入控制台(同一文件,控制台也是一个文件)。但是,你可以让System.out
写入一个文件,而System.err
写入控制台(监视器)——这仅是其中一种场景。
编写一个程序,输出System.out
和System.err
信息,然后尝试以下操作:
java MyProgram > out.txt 2> err.txt # On a *NIX.
System.out
的消息将会被重定向到out.txt文件,System.err
的消息将会被重定向到err.txt文件。需要记住的基本点是将System.out和System.err视为流(它们实际上就是这样的)而不是输出到显示器的机制,这是我作为初学者的错误假设。
它们分别进入系统的stdout和stderr流。在大多数操作系统上,它们是不同的,并且可以发送到不同的位置。例如,如果您的程序输出需要由另一个程序解析,那么这可能很有用-如果它需要报告错误,则stderr通常是更好的位置,因为您可能已经设置了它以引起人类的注意。
err
流的输出显示为红色。System.out将输出发送到标准输出流。System.err将输出发送到标准错误流。 默认情况下,这两个都写入控制台。
然而,好处在于这两个流可以被重定向,因此您可以将system.out输出重定向到普通日志文件,将System.err输出重定向到错误日志。