argius note

プログラミング関連

System.in, System.out, System.errを再初期化する

またかなり間が空いてしまいましてすみません。

今さら感あふれるネタですが、知らなかったのでメモ。


結論を先に書きます。

下記ページで知りました。


System.in, System.out, System.errの再初期化は、下記のようにします。
FileDescriptorを使うのがポイントです。

// import java.io.*;

System.setIn(new BufferedInputStream(new FileInputStream(FileDescriptor.in)));
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
System.setErr(new PrintStream(new FileOutputStream(FileDescriptor.err)));


ただし、これだけでは完全ではありません。理由は後述します。


元々入っているのを退避しておいて、後で戻す方法でも、もちろんOKです。
これについても後述します。


続きを読む