Pregunta

Estoy invocando una función que imprime alguna cadena en mi consola/salida estándar. Necesito capturar esta cadena. No puedo modificar la función que está realizando la impresión, ni cambiar el comportamiento de tiempo de ejecución a través de la herencia. No puedo encontrar ningún método predefinido que me permita hacer esto.

¿El JVM almacena un búfer de contenido impreso?

¿Alguien sabe de un método de Java que me ayude?

¿Fue útil?

Solución

Puede reemplazar temporalmente System.err o System.out con una transmisión que escribe en buffer de cadena.

Otros consejos

Puede redirigir la salida estándar llamando

System.setOut(myPrintStream);

O - si necesita registrarlo en tiempo de ejecución, canse la salida a un archivo:

java MyApplication > log.txt

Otro truco: si desea redirigir y no puede cambiar el código: implementa un envoltorio rápido que llama a su aplicación y comience esa:

public class RedirectingStarter {
  public static void main(String[] args) {
    System.setOut(new PrintStream(new File("log.txt")));
    com.example.MyApplication.main(args);
  }
}
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");

        }

    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top