Я проголосовал за ответ Яна и хотел добавить:
Использование setOut означает, что вы больше не можете печатать на system.out в вашей программе.
Вы можете сделать
PrintStream oldOut=System.out
сначала сохраните его, затем вызовите setOut, чтобы изменить его, а затем просто напечатайте в oldOut.
Я зашел так далеко, что использовал это как мини-логгер - возьмите System.out, замените его собственным потоком, и мой собственный поток возьмет трассировку стека и определит вызывающий метод, чтобы он мог добавьте имя метода перед отправкой в исходный System.out.
Очень медленно, но хорошо для отладки. Была настройка, чтобы вы могли вернуться к простой печати строки, скрыть все выходные данные или отфильтровать, по какому методу приходило сообщение (это было моим основным использованием, скрывая весь другой мусор, чтобы я мог видеть свой собственный вывод).