今天查看代码时遇到了System.err,但是平时使用的并不多,以下是我查到的资料出处不详,给大家做个参考,在此对作者给予感谢:
资料一:
System.out leads the output to the standard output stream (normally mapped to the console screen). System.err leads the output to the standard error stream (and, by default to the console, as well). The idea behind having these two is that the standard output should be used for regular program output, and standard error should be used for error messages.
Both the streams can be redirected to different destinations. If it is desired to redirect the output to an output file and error messages to a different log file, than on UNIX it can be done as follows:
java MyClass > output.log 2>error.log
This causes the regular output (using System.out) to be stored in output.log and error messages (using System.err) to be stored in error.log.
If you have put error messages in your program, but you don't want to see them, the technique given below can be used to do it:
Java MyClass 2> /null
This redirects the System.err messages to /null, so no error messages appear on the screen, but the normal program output can still be seen.
资料二:
大多数操作系统都有三个标准文件描述符:标准输入,标准输出,标准出错。
三个操作系统的文件描述符映射到编程语言的标准库中,往往加了一层包装,但是名字通常还是叫标准输入,标准输出,标准出错。
在其它语言中的一般写法是:stdin,stdout,stderr(有的语言里大写,有的语言里小写)。对应Java中的System.in,System.out,System.err。
在语言层面的实现三个文件描述符都是可以重定向的(只要你想)。但是一般而言,如果你在unix shell或windows command line中使用管道或重定向,则只是针对标准输入和输出。
另外,标准输出和标准出错的一个区别是,标准输出往往是带缓存的,而标准出错没有缓存(默认设置,可以改)。所以如果你用标准出错打印出来的东西可以马上显示在屏幕,而标准输出打印出来的东西可能要再积累几个字符才能一起打印出来。如果你在应用中混用标准输出和标准出错就可能看到这个问题。
总的来说,System.out用于正常的输出,也就是程序真正想输出的内容。而System.err用于出错信息的输出,也就是你本来不期待看到的东西。
因此,System.err打出来的信息常常会跑到System.out信息的前面去。