ProcessBuilder/Runtime.execでリダイレクト

状況

外部プロセスを起動するとき、外部コマンドとしてリダイレクト(><|ということです)を使えると便利ですが、ProcessBuilder/Runtime.execでは入出力をJava側でもってきてしまうため、リダイレクトは使えません。

解決

シェルを介して実行します。UNIX系ならばたとえば

  • Runtime.exec("/bin/sh", "-c", "launcher", ">", "file");

といった感じで、Windowsだと

  • Runtime.exec("cmd.exe", "/c", "launcher", "<", "file", "|", "app.exe");

といったところです。

ついでに、System.getProperties("os.name")で分岐すればよろしそう。