diff --git a/core-java-modules/core-java-io-4/src/main/java/com/baeldung/iostreams/InputSequenceHandler.java b/core-java-modules/core-java-io-4/src/main/java/com/baeldung/iostreams/InputSequenceHandler.java new file mode 100644 index 0000000000..7b09c3cc72 --- /dev/null +++ b/core-java-modules/core-java-io-4/src/main/java/com/baeldung/iostreams/InputSequenceHandler.java @@ -0,0 +1,45 @@ +package com.baeldung.iostreams; + +import java.io.*; +import java.util.List; +import java.util.Vector; + +public class InputSequenceHandler { + + private SequenceInputStream sequenceInputStream; + + public InputSequenceHandler(Vector inputStreams) { + sequenceInputStream = new SequenceInputStream(inputStreams.elements()); + } + + public InputSequenceHandler(String file1, String file2) throws FileNotFoundException { + sequenceInputStream = new SequenceInputStream(new FileInputStream(file1), new FileInputStream(file2)); + } + + public InputSequenceHandler(List fileNames) throws FileNotFoundException { + Vector inputStreams = new Vector<>(); + + for (String fileName: fileNames) { + inputStreams.add(new FileInputStream(fileName)); + } + sequenceInputStream = new SequenceInputStream(inputStreams.elements()); + } + + + public int read() throws IOException { + return sequenceInputStream.read(); + } + + public String readAsString() throws IOException { + StringBuilder stringBuilder = new StringBuilder(); + int readByte; + while ((readByte = sequenceInputStream.read()) != -1) { + stringBuilder.append((char) readByte); + } + return stringBuilder.toString(); + } + + public void close() throws IOException { + sequenceInputStream.close(); + } +} diff --git a/core-java-modules/core-java-io-4/src/test/java/com/baeldung/iostreams/InputSequenceUnitTest.java b/core-java-modules/core-java-io-4/src/test/java/com/baeldung/iostreams/InputSequenceUnitTest.java new file mode 100644 index 0000000000..5ee8f8542d --- /dev/null +++ b/core-java-modules/core-java-io-4/src/test/java/com/baeldung/iostreams/InputSequenceUnitTest.java @@ -0,0 +1,77 @@ +package com.baeldung.iostreams; + +import org.junit.Test; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.SequenceInputStream; +import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import java.util.Vector; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class InputSequenceUnitTest { + + private static final String FILE1 = "iostreams/File1.txt"; + private static final String FILE2 = "iostreams/File2.txt"; + private static final String FILE3 = "iostreams/File3.txt"; + + private static final String FILE1_AND_FILE2_CONTENT = "InputSequenceUnitTest"; + private static final String ALL_FILES_CONTENT = "InputSequenceUnitTest is Success"; + + @Test + public void givenTwoFiles_readAsString() throws URISyntaxException, IOException { + String file1 = Paths.get(ClassLoader.getSystemResource(FILE1).toURI()).toString(); + String file2 = Paths.get(ClassLoader.getSystemResource(FILE2).toURI()).toString(); + InputSequenceHandler inputSequenceHandler = new InputSequenceHandler(file1, file2); + String stringValue = inputSequenceHandler.readAsString(); + inputSequenceHandler.close(); + assertEquals(stringValue, FILE1_AND_FILE2_CONTENT); + } + + @Test + public void givenFileList_readAsString() throws URISyntaxException, IOException { + List filesList = new ArrayList<>(); + filesList.add(Paths.get(ClassLoader.getSystemResource(FILE1).toURI()).toString()); + filesList.add(Paths.get(ClassLoader.getSystemResource(FILE2).toURI()).toString()); + filesList.add(Paths.get(ClassLoader.getSystemResource(FILE3).toURI()).toString()); + InputSequenceHandler inputSequenceHandler = new InputSequenceHandler(filesList); + String stringValue = inputSequenceHandler.readAsString(); + inputSequenceHandler.close(); + assertEquals(stringValue, ALL_FILES_CONTENT); + } + + @Test + public void givenVectorOfInputStreams_readAsString() throws IOException { + String[] strings = {"Testing", "Leads", "to", "failure", + "and", "failure", "leads", "to", "understanding"}; + Vector inputStreamVector = new Vector<>(); + StringBuilder stringBuilder = new StringBuilder(); + for (String string: strings) { + inputStreamVector.add(new ByteArrayInputStream(string.getBytes(StandardCharsets.UTF_8))); + stringBuilder.append(string); + } + InputSequenceHandler inputSequenceHandler = new InputSequenceHandler(inputStreamVector); + String combinedString = inputSequenceHandler.readAsString(); + inputSequenceHandler.close(); + assertEquals(stringBuilder.toString(), combinedString); + } + + @Test + public void givenTwoStrings_readCombinedValue() throws IOException { + InputStream first = new ByteArrayInputStream("One".getBytes()); + InputStream second = new ByteArrayInputStream("Magic".getBytes()); + SequenceInputStream sequenceInputStream = new SequenceInputStream(first, second); + StringBuilder stringBuilder = new StringBuilder(); + int byteValue; + while ((byteValue = sequenceInputStream.read()) != -1) { + stringBuilder.append((char) byteValue); + } + assertEquals("OneMagic", stringBuilder.toString()); + } +} diff --git a/core-java-modules/core-java-io-4/src/test/resources/iostreams/File1.txt b/core-java-modules/core-java-io-4/src/test/resources/iostreams/File1.txt new file mode 100644 index 0000000000..fa17a296b5 --- /dev/null +++ b/core-java-modules/core-java-io-4/src/test/resources/iostreams/File1.txt @@ -0,0 +1 @@ +InputSequence \ No newline at end of file diff --git a/core-java-modules/core-java-io-4/src/test/resources/iostreams/File2.txt b/core-java-modules/core-java-io-4/src/test/resources/iostreams/File2.txt new file mode 100644 index 0000000000..0eb8734500 --- /dev/null +++ b/core-java-modules/core-java-io-4/src/test/resources/iostreams/File2.txt @@ -0,0 +1 @@ +UnitTest \ No newline at end of file diff --git a/core-java-modules/core-java-io-4/src/test/resources/iostreams/File3.txt b/core-java-modules/core-java-io-4/src/test/resources/iostreams/File3.txt new file mode 100644 index 0000000000..2f237d7c44 --- /dev/null +++ b/core-java-modules/core-java-io-4/src/test/resources/iostreams/File3.txt @@ -0,0 +1 @@ + is Success \ No newline at end of file