Як ми можемо перенаправити вихід з консолі програми Java на кілька файлів?


161

Як ми можемо перенаправити вихід консолі затемнення на файл? Я можу:

  1. Run Configuration-> Commons-> Select a file.
  2. Використовуйте System.setOut(PrintStream)і System.setErr(PrintStream).

Проблема з 1) полягає в тому, що мені потрібно записати консольний вихід у різні файли замість одного файлу.

Проблема 2) полягає в тому, що він зберігає лише консольний вихід, що генерується за System.out.println()рахунок викинутого винятку або стеки. Він не фіксує іншого виду, наприклад, попередження log4j тощо.

Як ми можемо програмно перенаправляти вихід консолі на різні файли?


1) Можливо, ви повинні використовувати "Змінні .." (колишній) C: \ test $ {???: ??}. Txt
cloverink

2
Ось ідея. Напишіть свій власний плагін eclipse (тобто кнопку cusotm), який призначив би зміну випадковому, але унікальному значенню (називається ${NAME}), тоді зробить те саме, що і run. Потім використовуйте $NAMEяк значення для вихідного файлу. може бути?
Один два три

Відповіді:


176

Перейдіть до запуску як і виберіть Run Configurations->, Commonа в стандартному вході та виході ви також можете вибрати файл.


106
Мені здається абсолютно смішним, що 40 людей підтримали копію-пасту з другого рядка питання.
AnthonyW

13
@AnthonyW Я думаю, що це здебільшого тому, що людей тут веде заголовок питання, яке є "Як ми можемо перенаправити висновок затемнення до файлу". Ця відповідь насправді є відповіддю на заголовне питання.
Гером Бохман

1
Якщо ви не можете знайти "Запустити конфігурації", використовуючи Eclipse 4.4 (Luna), я відкрив конфігурацію запуску (подвійним клацанням на сервері на вкладці Сервери), натиснув "Відкрити конфігурацію запуску", а потім перейшов на загальну вкладку . У нижній половині цього діалогового вікна є розділ під назвою "Стандартний ввід та вихід". Тут я міг натиснути на файл і дати йому ім'я файлу.
Хлопець Шалнат

1
Підказка: відкрийте термінал echo $TTYі вкажіть, що він повертається як ваш файл. Тоді термінал відобразить дзеркальне відображення в консолі Eclipse.
Шрідхар Сарнобат

2
Що? Ця відповідь є неправильною, якщо уважно читати запитання запитувача.
ComputerScientist

11

Ви можете використовувати "змінну" всередині вихідного імені файлу, наприклад:

/tmp/FetchBlock-${current_date}.txt

Поточна дата:

Повертає поточний системний час, відформатований як yyyyMMdd_HHmm. Необов’язковий аргумент може бути використаний для надання альтернативного форматування. Аргумент повинен бути дійсним шаблоном для java.util.SimpleDateFormat.

Або ви також можете скористатися system_property або env_var, щоб вказати щось динамічне (або потрібно вказати як аргументи)


8

Ви можете встановити вихід System.out програмно, виконавши:

System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream("/location/to/console.out")), true));

Редагувати:

Через те, що це рішення засноване на a PrintStream, ми можемо включити autoFlush, але згідно з документами :

autoFlush - булевий; якщо вірно, то вихідний буфер буде зчищений кожного разу, коли записується байтовий масив, викликається один із методів println або записується символ чи новий байт ('\ n')

Отже, якщо новий рядок не записаний, не забудьте зробити це System.out.flush()вручну.

(Спасибі Роберту Тупело-Шнеку)


1
Здається, що вам також потрібно закритись System.out.flush(), щоб уникнути можливого пропуску певного результату.
Роберт Тупело-Шнек

1

Для вирішення проблеми я використовую змінну $ {string_prompt}. Він показує діалогове вікно введення при запуску програми. Я можу встановити дату / час вручну в цьому діалоговому вікні.

  1. Переміщення курсору в кінці шляху файлу. введіть тут опис зображення

  2. Клацніть змінні та виберіть string_prompt введіть тут опис зображення

  3. Виберіть Застосувати та запустити введіть тут опис зображення введіть тут опис зображення


0

Це можна зробити, встановивши змінну класу System таким чином

System.setOut (новий PrintStream (новий FileOutputStream ("Шлях до виводу файлу"))). Крім того, вам потрібно закрити або вимити змінну 'System.out.close () або System.out.flush ()), щоб ви не пропустили деякий вихід.

Джерело: http://xmodulo.com/how-to-save-console-output-to-file-in-eclipse.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.