– Cześć, Amigo! Dzisiaj dowiemy się kilku ciekawych rzeczy: jak zastąpić strumień wejściowy System.in.

System.in jest zwykłą statyczną zmienną InputStream, ale nie można tak po prostu przypisać do niej nowej wartości. Można natomiast użyć metody System.setIn().

Najpierw musimy stworzyć bufor, a następnie umieścić w nim kilka wartości. Następnie opakujemy go w klasę, która wie jak odczytywać dane z bufora za pomocą protokołu InputStream.

Wygląda to tak:

Kod
public static void main(String[] args) throws IOException
{
 //Wprowadź dane do ciągu
 StringBuilder sb = new StringBuilder();
 sb.append("Lena").append('\n');
 sb.append("Ola").append('\n');
 sb.append("Ania").append('\n');
 String data = sb.toString();

 //Opakuj ciąg w ByteArrayInputStream
 InputStream is = new ByteArrayInputStream(data.getBytes());

 //Zamień
 System.setIn(is);

 //Wywołaj zwykłą metodę, która nie wie o naszych zmianach
 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();
}

– Bilaabo! To najciekawszy przykład, jaki kiedykolwiek widziałem. Nie wiedziałem, że to potrafisz. Dzięki.

– Proszę bardzo.