2009年11月11日

【Java】Runtime.execでリダイレクト付きコマンド実行

今日、Javaからコマンドラインでmysqlを実行させようとした際に、Runtime.execはリダイレクトの入ったコマンドを実行してくれないことを思い出した。

リダイレクトを実行するには、shとかcmdとかを噛ませて実行してあげる必要があります。


// MySQLのコマンドを叩いてます
// Commons LangのSystemUtils使ってます

String[] cmd = {
"sh",
"-c",
"mysql -uuser -ppass dbname < file_name"
};

// Windowsの場合はcmd /cをたたきます
if( SystemUtils.IS_OS_WINDOWS ) {
cmd[0] = "cmd";
cmd[1] = "/c";
}

Process process = Runtime.getRuntime().exec( cmd );
process.waitFor();