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.

Get our Articles via Email. Enter your email address.

You may also like...

2 Comments

  1. niyong says:

    Good Trick.

  2. mp14 says:

    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 *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>