System.in, System.out, System.errを再初期化する
またかなり間が空いてしまいましてすみません。
今さら感あふれるネタですが、知らなかったのでメモ。
結論を先に書きます。
下記ページで知りました。
- java - Resetting Standard output Stream - Stack Overflow http://stackoverflow.com/questions/5339499/resetting-standard-output-stream
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です。
これについても後述します。