diff --git a/core-java-modules/core-java-console/src/main/java/com/baeldung/systemin/SystemInRead.java b/core-java-modules/core-java-console/src/main/java/com/baeldung/systemin/SystemInRead.java new file mode 100644 index 0000000000..e815cdae2f --- /dev/null +++ b/core-java-modules/core-java-console/src/main/java/com/baeldung/systemin/SystemInRead.java @@ -0,0 +1,45 @@ +package com.baeldung.systemin; + +import java.io.IOException; + +class SystemInRead { + static void readSingleCharacter() { + System.out.println("Enter a character:"); + try { + int input = System.in.read(); + System.out.println((char) input); + } + catch (IOException e) { + System.err.println("Error reading input: " + e.getMessage()); + } + } + static void readMultipleCharacters() { + System.out.println("Enter characters (Press 'Enter' to quit):"); + try { + int input; + while ((input = System.in.read()) != '\n') { + System.out.print((char) input); + } + } catch (IOException e) { + System.err.println("Error reading input: " + e.getMessage()); + } + } + + static void readWithParameters() { + try { + byte[] byteArray = new byte[5]; + int bytesRead; + int totalBytesRead = 0; + + while ((bytesRead = System.in.read(byteArray, 0, byteArray.length)) != -1) { + System.out.print("Data read: " + new String(byteArray, 0, bytesRead)); + totalBytesRead += bytesRead; + } + + System.out.println("\nBytes Read: " + totalBytesRead); + + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/core-java-modules/core-java-console/src/test/java/com/baeldung/systemin/SystemInReadUnitTest.java b/core-java-modules/core-java-console/src/test/java/com/baeldung/systemin/SystemInReadUnitTest.java new file mode 100644 index 0000000000..60ed99ca3a --- /dev/null +++ b/core-java-modules/core-java-console/src/test/java/com/baeldung/systemin/SystemInReadUnitTest.java @@ -0,0 +1,41 @@ +package com.baeldung.systemin; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; + +import org.junit.jupiter.api.Test; + +public class SystemInReadUnitTest { + @Test + void givenUserInput_whenUsingReadMultipleCharacters_thenRead() { + System.setIn(new ByteArrayInputStream("Hello\n".getBytes())); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + System.setOut(new PrintStream(outputStream)); + SystemInRead.readMultipleCharacters(); + + assertEquals("Enter characters (Press 'Enter' to quit):\n" + "Hello", outputStream.toString().trim()); + } + + @Test + void givenUserInput_whenUsingReadSingleCharacter_thenRead() { + System.setIn(new ByteArrayInputStream("A".getBytes())); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + System.setOut(new PrintStream(outputStream)); + SystemInRead.readSingleCharacter(); + + assertEquals("Enter a character:\nA", outputStream.toString().trim()); + } + + @Test + void givenUserInput_whenUsingReadWithParameters_thenRead() { + System.setIn(new ByteArrayInputStream("ABC".getBytes())); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + System.setOut(new PrintStream(outputStream)); + SystemInRead.readWithParameters(); + + assertEquals("Data read: ABC\n" + "Bytes Read: 3", outputStream.toString().trim()); + } +}