Методы System.setOut
и System.setErr
позволяют изменять PrintStream
объекты, что System.out
и System.err
переменные относятся к. Вы можете использовать их для замены объектов по умолчанию PrintStream
объектами, которые захватывают выходные данные, или делать с ними все, что вы хотите.
Followup
Я не хочу, чтобы заменить PrintStreams, потому что я все еще нужен выход, чтобы перейти к командной строке.
Ваш код может позаботиться о том, что:
- Создайте подкласс
OutputStream
, который записывает вывод на другой OutputStream
инстанции, а также перехватывает вывод. Сделайте «другой» экземпляр параметром constructort.
- Получить текущие значения
System.out
и System.err
.
- Мгновую активацию вашего подкласса дважды с значениями
System.out
и System.err
в качестве параметров конструктора соответственно.
- Оберните эти два экземпляра как
PrintStream
экземпляров.
- Звоните
System.setOut
и System.setErr
на замену System.out
и System.err
с примерами PrintStream
.
В чем причина этого требования? Если это для ведения журнала или отладки, вам следует рассмотреть возможность использования структуры ведения журнала, а не stderr и stdout. Если вы находитесь в системе * nix, вы можете просто перенаправить stdout и stderr в файл и зачеркнуть файл ... – beggs 2010-11-25 03:19:55
Я пишу потоковый API, в котором вы можете получить консольный вывод для программы. Таким образом, все, что входит в консоль, также можно рассматривать как поток HTTP. – 2010-11-25 03:33:01