[output-to-file] Write Console Output to Text File in Java (#14082)
* [output-to-file] Write Console Output to Text File in Java * [output-to-file] rebase on the master
This commit is contained in:
parent
2ea83407d3
commit
df15627edc
|
@ -99,9 +99,6 @@
|
|||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<properties>
|
||||
<junit-jupiter-version>5.2.0</junit-jupiter-version>
|
||||
</properties>
|
||||
<build>
|
||||
<finalName>core-java-io-apis-2</finalName>
|
||||
<resources>
|
||||
|
@ -111,5 +108,7 @@
|
|||
</resource>
|
||||
</resources>
|
||||
</build>
|
||||
|
||||
<properties>
|
||||
<junit-jupiter-version>5.9.3</junit-jupiter-version>
|
||||
</properties>
|
||||
</project>
|
|
@ -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<String> 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);
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue