Capturing contents of standard output in Java

前端 未结 3 1928
情话喂你
情话喂你 2020-12-01 11:07

I am invoking a function that is printing some string in my console/standard output. I need to capture this string. I cannot modify the function that is doing the printing,

相关标签:
3条回答
  • 2020-12-01 11:36

    You could temporarily replace System.err or System.out with a stream that writes to string buffer.

    0 讨论(0)
  • 2020-12-01 11:49

    You can redirect the standard output by calling

    System.setOut(myPrintStream);
    

    Or - if you need to log it at runtime, pipe the output to a file:

    java MyApplication > log.txt
    

    Another trick - if you want to redirect and can't change the code: Implement a quick wrapper that calls your application and start that one:

    public class RedirectingStarter {
      public static void main(String[] args) {
        System.setOut(new PrintStream(new File("log.txt")));
        com.example.MyApplication.main(args);
      }
    }
    
    0 讨论(0)
  • 2020-12-01 11:50
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.PrintStream;
    
    public class RedirectIO
    {
    
        public static void main(String[] args)
        {
            PrintStream orgStream   = null;
            PrintStream fileStream  = null;
            try
            {
                // Saving the orginal stream
                orgStream = System.out;
                fileStream = new PrintStream(new FileOutputStream("out.txt",true));
                // Redirecting console output to file
                System.setOut(fileStream);
                // Redirecting runtime exceptions to file
                System.setErr(fileStream);
                throw new Exception("Test Exception");
    
            }
            catch (FileNotFoundException fnfEx)
            {
                System.out.println("Error in IO Redirection");
                fnfEx.printStackTrace();
            }
            catch (Exception ex)
            {
                //Gets printed in the file
                System.out.println("Redirecting output & exceptions to file");
                ex.printStackTrace();
            }
            finally
            {
                //Restoring back to console
                System.setOut(orgStream);
                //Gets printed in the console
                System.out.println("Redirecting file output back to console");
    
            }
    
        }
    }
    
    0 讨论(0)
提交回复
热议问题