— Привіт, Аміго! Сьогодні ми будемо займатися дуже цікавою роботою – заміною потоку введення – 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 = новий InputStreamReader(System.in);
 BufferedReader reader = новий BufferedReader(isr);

 while (true)
 {
  String line = reader.readLine();
  if (line == null) break;
  System.out.println(line);
 }
 reader.close();
 isr.close();
}

— Білаабо! Це найцікавіший приклад із усього, що я бачив. Я не знав, що так можна робити. Дякую.

— Нема за що, друже Аміго.