System.out and System.err stream objects are mapped to “standard” output and error stream respectively. By default, Java display standard output/error on display console. Thus, when we print a statement using System.out:
System.out.println("Hello World!");
System.err.println("errr.. Hello World!");
Code language: Java (java)
It prints the messages to default console. What if you want to reassign the “standard” output and error stream? Lets say you want to redirect all those standard out messages in a File. System class provides some useful API to re-assign “standard” input, output and error streams.
setErr(PrintStream err)
: Reassigns the “standard” error output streamsetIn(InputStream in)
: Reassigns the “standard” input stream.setOut(PrintStream out)
: Reassigns the “standard” output stream.
In below Java code we reassign “standard” output to a file and redirect all sysout messages to that file.
System.out.println("January");
System.out.println("February");
PrintStream ps = new PrintStream("C:/sample.txt");
System.setOut(ps);
System.out.println("March");
System.out.println("April");
ps.close();
Code language: Java (java)
Output:
January February
File: sample.txt
March April
Thus only January and February will be displayed in console and March April will be printed in sample.txt file.
Good Trick.
If you want to bring console output back you can use this code:
I took it right from initializeSystemClass() method of System class.
can we attach more than one stream?