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

Get our Articles via Email. Enter your email address.

You may also like...

3 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.

  3. Marcos says:

    can we attach more than one stream?

Leave a Reply

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