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