Javaの標準出力・エラーを一時的に出力させなくする

Java9以上でのGuice使用で警告表示で書いたことだが、一時的にSystem.out, System.errを止めたいことがある。先の投稿では結局、System.errを操作しただけでは止まらないのだが、一応止めるためのクラスを作成してみた。

テストも付属している。


import java.io.*; public abstract class OmitStd implements Closeable { protected PrintStream saved; protected static PrintStream DO_NOTHING = new PrintStream(new OutputStream() { public void write(int b) { //DO NOTHING } }); @Override public abstract void close(); public static class Out extends OmitStd { public Out() { saved = System.out; System.setOut(DO_NOTHING); } @Override public void close() { System.setOut(saved); } } public static class Err extends OmitStd { public Err() { saved = System.err; System.setErr(DO_NOTHING); } @Override public void close() { System.setErr(saved); } } /** テスト */ public static void main(String[]args) { try (OmitStd o = new OmitStd.Out()) { System.out.println("out omited"); } System.out.println("out not omited"); try (OmitStd o = new OmitStd.Err()) { System.err.println("err omited"); } System.err.println("err not omited"); } }

mainを実行すると以下の表示になる。

out not omited
err not omited