How to Redirect Standard Output/Error in Java

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!");

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 stream
  • setIn(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();

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.



2 Comments

  • niyong 17 January, 2013, 18:28

    Good Trick.

  • mp14 30 May, 2014, 17:08

    If you want to bring console output back you can use this code:

     
    FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
    PrintStream defaultPrintStream = new PrintStream(new BufferedOutputStream(fdOut, 128), true);
    System.setOut(defaultPrintStream)
    

    I took it right from initializeSystemClass() method of System class.

Leave a Reply

Your email address will not be published. Required fields are marked *

Note

To post source code in comment, use [code language] [/code] tag, for example:

  • [code java] Java source code here [/code]
  • [code html] HTML here [/code]

Current day month ye@r *