diff --git a/core-java-modules/core-java-io-apis-2/pom.xml b/core-java-modules/core-java-io-apis-2/pom.xml
index 22c04cdc58..e828b730d2 100644
--- a/core-java-modules/core-java-io-apis-2/pom.xml
+++ b/core-java-modules/core-java-io-apis-2/pom.xml
@@ -99,9 +99,6 @@
compile
-
- 5.2.0
-
core-java-io-apis-2
@@ -111,5 +108,7 @@
-
+
+ 5.9.3
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-io-apis-2/src/test/java/com/baeldung/outputtofile/ConsoleOutputToFileUnitTest.java b/core-java-modules/core-java-io-apis-2/src/test/java/com/baeldung/outputtofile/ConsoleOutputToFileUnitTest.java
new file mode 100644
index 0000000000..c7f643b148
--- /dev/null
+++ b/core-java-modules/core-java-io-apis-2/src/test/java/com/baeldung/outputtofile/ConsoleOutputToFileUnitTest.java
@@ -0,0 +1,94 @@
+package com.baeldung.outputtofile;
+
+import static org.junit.jupiter.api.Assertions.assertLinesMatch;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.List;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+
+import com.google.common.collect.Lists;
+
+class DualPrintStream extends PrintStream {
+ private final PrintStream second;
+
+ public DualPrintStream(OutputStream main, PrintStream second) {
+ super(main);
+ this.second = second;
+ }
+
+ @Override
+ public void close() {
+ super.close();
+ second.close();
+ }
+
+ @Override
+ public void flush() {
+ super.flush();
+ second.flush();
+ }
+
+ @Override
+ public void write(byte[] buf, int off, int len) {
+ super.write(buf, off, len);
+ second.write(buf, off, len);
+ }
+
+ @Override
+ public void write(int b) {
+ super.write(b);
+ second.write(b);
+ }
+
+ @Override
+ public void write(byte[] b) throws IOException {
+ super.write(b);
+ second.write(b);
+ }
+}
+
+public class ConsoleOutputToFileUnitTest {
+
+ // @formatter:off
+ private final static List OUTPUT_LINES = Lists.newArrayList(
+ "I came",
+ "I saw",
+ "I conquered");
+ // @formatter:on
+
+ @Test
+ void whenReplacingSystemOutPrintStreamWithFileOutputStream_thenOutputsGoToFile(@TempDir Path tempDir) throws IOException {
+ PrintStream originalOut = System.out;
+ Path outputFilePath = tempDir.resolve("file-output.txt");
+ PrintStream out = new PrintStream(Files.newOutputStream(outputFilePath), true);
+ System.setOut(out);
+
+ OUTPUT_LINES.forEach(line -> System.out.println(line));
+ assertTrue(outputFilePath.toFile()
+ .exists(), "The file exists");
+ assertLinesMatch(OUTPUT_LINES, Files.readAllLines(outputFilePath));
+ System.setOut(originalOut);
+ }
+
+ @Test
+ void whenUsingDualPrintStream_thenOutputsGoToConsoleAndFile(@TempDir Path tempDir) throws IOException {
+ PrintStream originalOut = System.out;
+ Path outputFilePath = tempDir.resolve("dual-output.txt");
+ DualPrintStream dualOut = new DualPrintStream(Files.newOutputStream(outputFilePath), System.out);
+ System.setOut(dualOut);
+
+ OUTPUT_LINES.forEach(line -> System.out.println(line));
+ assertTrue(outputFilePath.toFile()
+ .exists(), "The file exists");
+ assertLinesMatch(OUTPUT_LINES, Files.readAllLines(outputFilePath));
+ System.setOut(originalOut);
+
+ }
+}
\ No newline at end of file