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







ディスカッション
コメント一覧
まだ、コメントがありません