Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Capturar la salida de la consola

Hola amigos,tengo un problema y me gustaría saber si me podrían ayudar.

El caso es que yo tengo que ejecutar una función de la cual no conozco su contenido (ni lo puedo modificar). Esta función al acabar de ejecutarse imprime por pantalla un mensaje de resultado. Como podría capturar ese mensaje y convertirlo en un String?

Muchas gracias!

agosto 21, 2014 | Unregistered CommenterDiego

public class NewMain {

public static void main(String[] args) throws IOException {

PrintStream oldSystemOut = getOldSystemOut(new PrintStream(Files.newOutputStream(Paths.get("systemout.txt"))));
System.out.println("Prueba de captura de consola para System.out");
getBackSystemOut(oldSystemOut);
System.out.println("System.out de nuevo por consola");

PrintStream oldSystemErr = getOldSystemErr(new PrintStream(Files.newOutputStream(Paths.get("systemerr.txt"))));
System.err.println("Prueba de captura de consola para System.err");
getBackSystemErr(oldSystemErr);
System.err.println("System.err de nuevo por consola");
}

private static void getBackSystemOut(PrintStream oldSystemOut) {
System.out.flush();
System.setOut(oldSystemOut);
}

private static void getBackSystemErr(PrintStream oldSystemErr) {
System.err.flush();
System.setErr(oldSystemErr);
}

private static PrintStream getOldSystemOut(PrintStream printStream) {
PrintStream oldSystemOut = System.out;
System.setOut(printStream);
return oldSystemOut;
}

private static PrintStream getOldSystemErr(PrintStream printStream) {
PrintStream oldSystemErr = System.err;
System.setErr(printStream);
return oldSystemErr;
}

}

http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html
http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html

Puesto que PrintStream acepta un OutputStream como parámetro, puedes usar cualquiera de sus implementaciones. En el test anterior he usado el FileOutpuStream.
Si necesitas obtener la salida en ejecución, sin crear ni leer un archivo, puedes probar con ByteArrayOutputStream.

agosto 21, 2014 | Registered Commenterchoces