diff --git a/core-java/src/main/java/com/baeldung/bufferedreader/BufferedReaderExample.java b/core-java/src/main/java/com/baeldung/bufferedreader/BufferedReaderExample.java index 2260c5e2bd..591122d18f 100644 --- a/core-java/src/main/java/com/baeldung/bufferedreader/BufferedReaderExample.java +++ b/core-java/src/main/java/com/baeldung/bufferedreader/BufferedReaderExample.java @@ -3,6 +3,7 @@ package com.baeldung.bufferedreader; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; +import java.util.stream.Collectors; public class BufferedReaderExample { @@ -19,14 +20,12 @@ public class BufferedReaderExample { } public String readAllLinesWithStream(BufferedReader reader) { - StringBuilder content = new StringBuilder(); - reader.lines() - .forEach(line -> content.append(line) - .append(System.lineSeparator())); - return content.toString(); + return reader + .lines() + .collect(Collectors.joining(System.lineSeparator())); } - public String readAllCharacters(BufferedReader reader) throws IOException { + public String readAllCharsOneByOne(BufferedReader reader) throws IOException { StringBuilder content = new StringBuilder(); int value; @@ -37,43 +36,18 @@ public class BufferedReaderExample { return content.toString(); } - public String readAllCharactersUsingArray(BufferedReader reader) throws IOException { - StringBuilder content = new StringBuilder(); + public String readMultipleChars(BufferedReader reader) throws IOException { + char[] chars = new char[5]; + int charsRead = reader.read(chars, 0, 5); - char[] buf = new char[512]; - int charsRead; - - while ((charsRead = reader.read(buf, 0, buf.length)) != -1) { - content.append(buf, 0, charsRead); + String result; + if (charsRead != -1) { + result = new String(chars); + } else { + result = ""; } - return content.toString(); - } - - public String readWithSkipping(BufferedReader reader) throws IOException { - StringBuilder content = new StringBuilder(); - - int value; - while ((value = reader.read()) != -1) { - content.append((char) value); - reader.skip(4); - } - - return content.toString(); - } - - public String markAndReset(BufferedReader reader) throws IOException { - StringBuilder content = new StringBuilder(); - - reader.mark(512); - - for (int i = 0; i < 3; i++) { - content.append(reader.readLine()); - reader.reset(); - reader.mark(512); - } - - return content.toString(); + return result; } public String readFile() { diff --git a/core-java/src/test/java/com/baeldung/bufferedreader/BufferedReaderExampleUnitTest.java b/core-java/src/test/java/com/baeldung/bufferedreader/BufferedReaderExampleUnitTest.java index b90a4ab6ed..f47ba09097 100644 --- a/core-java/src/test/java/com/baeldung/bufferedreader/BufferedReaderExampleUnitTest.java +++ b/core-java/src/test/java/com/baeldung/bufferedreader/BufferedReaderExampleUnitTest.java @@ -1,13 +1,14 @@ package com.baeldung.bufferedreader; import org.junit.Test; -import org.springframework.util.StringUtils; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; +import java.io.StringReader; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertEquals; public class BufferedReaderExampleUnitTest { @@ -44,47 +45,25 @@ public class BufferedReaderExampleUnitTest { } @Test - public void givenBufferedReader_whenReadAllCharacters_thenReturnsContent() throws IOException { + public void givenBufferedReader_whenReadAllCharsOneByOne_thenReturnsContent() throws IOException { BufferedReader reader = new BufferedReader(new FileReader(FILE_NAME)); BufferedReaderExample bre = new BufferedReaderExample(); - String content = bre.readAllCharacters(reader); + String content = bre.readAllCharsOneByOne(reader); assertThat(content).isNotEmpty(); assertThat(content).contains("Lorem ipsum"); } @Test - public void givenBufferedReader_whenReadAllCharactersUsingArray_thenReturnsContent() throws IOException { + public void givenBufferedReader_whenReadMultipleChars_thenReturnsContent() throws IOException { BufferedReader reader = new BufferedReader(new FileReader(FILE_NAME)); BufferedReaderExample bre = new BufferedReaderExample(); - String content = bre.readAllCharactersUsingArray(reader); + String content = bre.readMultipleChars(reader); assertThat(content).isNotEmpty(); - assertThat(content).contains("Lorem ipsum"); - } - - @Test - public void givenBufferedReader_whenReadWithSkipping_thenReturnsScrambledContent() throws IOException { - BufferedReader reader = new BufferedReader(new FileReader(FILE_NAME)); - - BufferedReaderExample bre = new BufferedReaderExample(); - String content = bre.readWithSkipping(reader); - - assertThat(content).isNotEmpty(); - assertThat(content).contains("L mottneas"); - } - - @Test - public void givenBufferedReader_whenMarkAndReset_thenReturnsRepeatedContent() throws IOException { - BufferedReader reader = new BufferedReader(new FileReader(FILE_NAME)); - - BufferedReaderExample bre = new BufferedReaderExample(); - String content = bre.markAndReset(reader); - - assertThat(content.toString()).isNotEmpty(); - assertThat(StringUtils.countOccurrencesOf(content.toString(), "Lorem ipsum")).isEqualTo(3); + assertThat(content).contains("Lorem"); } @Test @@ -95,4 +74,37 @@ public class BufferedReaderExampleUnitTest { assertThat(content.toString()).contains("Lorem ipsum"); } + @Test + public void givenBufferedReader_whenSkipUnderscores_thenOk() throws IOException { + StringBuilder result = new StringBuilder(); + + try (BufferedReader reader = new BufferedReader(new StringReader("1__2__3__4__5"))) { + int value; + while((value = reader.read()) != -1) { + result.append((char) value); + reader.skip(2L); + } + } + + assertEquals("12345", result.toString()); + } + + @Test + public void givenBufferedReader_whenSkipsWhitespacesAtBeginning_thenOk() throws IOException { + String result; + + try (BufferedReader reader = new BufferedReader(new StringReader(" Lorem ipsum dolor sit amet."))) { + reader.mark(1); + + while (Character.isWhitespace(reader.read())) { + reader.mark(1); + } + + reader.reset(); + result = reader.readLine(); + } + + assertEquals("Lorem ipsum dolor sit amet.", result); + } + }