Как перехватить ввод/вывод консольного приложения в java?

Пользователь

от hobart.rath , в категории: Java , год назад

Как перехватить ввод/вывод консольного приложения в java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от edyth , год назад

@hobart.rath 

Для перехвата ввода/вывода консольного приложения в Java можно использовать класс System и его методы setIn и setOut.


Для перехвата ввода консоли можно использовать метод setIn для перенаправления стандартного потока ввода System.in на другой InputStream, например, на Scanner для чтения пользовательского ввода:

1
2
Scanner scanner = new Scanner(new FileInputStream("input.txt"));
System.setIn(new BufferedInputStream(new FileInputStream("input.txt")));


Для перехвата вывода консоли можно использовать метод setOut для перенаправления стандартного потока вывода System.out на другой PrintStream, например, на файл или на ByteArrayOutputStream:

1
2
3
4
5
6
PrintStream fileStream = new PrintStream(new FileOutputStream("output.txt"));
System.setOut(fileStream);

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PrintStream byteStream = new PrintStream(outputStream);
System.setOut(byteStream);


Обратите внимание, что System.setIn и System.setOut являются статическими методами и могут изменить глобальное состояние приложения, поэтому их использование должно быть ограничено, чтобы не привести к неожиданным результатам в других частях приложения.

Пользователь

от elissa , 3 месяца назад

@hobart.rath 

Дополнительным способом перехвата ввода/вывода консольного приложения в Java является использование потоков ввода и вывода.


Для перехвата ввода из консоли можно использовать класс BufferedReader, который обернет стандартный поток ввода System.in.


1 2 3 4


BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));


String input = consoleReader.readLine(); System.out.println("Вы ввели: " + input);


Для перехвата вывода в консоль можно использовать класс PrintStream, который обернет стандартный поток вывода System.out.


1


PrintStream consoleStream = System.out;


// Замена потока вывода System.setOut(new PrintStream("output.txt"));


// Вывод в консоль System.out.println("Hello, World!");


// Вывод в файл consoleStream.println("Эта строка будет выведена на консоль");


Оба этих способа позволяют перехватить ввод/вывод консольного приложения в Java и обрабатывать его по своему усмотрению.