Ответ 1
Вы можете временно заменить System.err или System.out потоком, который записывает в строковый буфер.
Я вызываю функцию, которая печатает некоторую строку в моей консоли/стандартном выходе. Мне нужно захватить эту строку. Я не могу изменить функцию, выполняющую печать, или изменить поведение времени выполнения через наследование. Я не могу найти предопределенные методы, которые позволят мне это сделать.
Сохраняет ли JVM буфер печатного содержимого?
Кто-нибудь знает о методе Java, который мне поможет?
Вы можете временно заменить System.err или System.out потоком, который записывает в строковый буфер.
Вы можете перенаправить стандартный вывод, вызвав
System.setOut(myPrintStream);
Или - если вам нужно зарегистрировать его во время выполнения, проведите вывод в файл:
java MyApplication > log.txt
Еще один трюк - если вы хотите перенаправить и не можете изменить код: Внесите быструю оболочку, которая вызывает ваше приложение, и запустите его:
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");
}
}
}