— Привет, Амиго! Сегодня мы будем заниматься очень интересной работой – подменой потока ввода – System.in.
System.in – это простая статическая переменная типа InputStream, но присвоить ей новое значение просто так нельзя. Зато можно воспользоваться методом System.setIn().
Для начала нам нужно создать буфер, потом положить в него какие-то значения. Затем завернуть в класс, который умеет из этого буфера читать данные по протоколу InputStream.
Вот как это выглядит:
Код
public static void main(String[] args) throws IOException
{
//кладем данные в строку
StringBuilder sb = new StringBuilder();
sb.append("Lena").append('\n');
sb.append("Olya").append('\n');
sb.append("Anya").append('\n');
String data = sb.toString();
//Оборачиваем строку в класс ByteArrayInputStream
InputStream is = new ByteArrayInputStream(data.getBytes());
//подменяем in
System.setIn(is);
//вызываем обычный метод, который не подозревает о наших манипуляциях
readAndPrintLine();
}
public static void readAndPrintLine() throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(isr);
while (true)
{
String line = reader.readLine();
if (line == null) break;
System.out.println(line);
}
reader.close();
isr.close();
}
— Билаабо! Это самый интересный пример из всего, что я видел. Я и не знал, что так можно делать. Спасибо.
— Не за что, друг Амиго.
System
определены разнообразные статические методы, управляющие поведением виртуальной машины - перенаправление стандартных потоков ввода-вывода, принудительный вызов сборщика мусора, принудительное завершение работы виртуальной машины... Кроме того есть методы для низкоуровревого копирования массивов, определение времени, прошедшего от запуска виртуальной машины, установки и получение системных пропертей... В общем почитай джавадок.