*Processのラッパー [#q24a5bdb] Java言語での不都合、といっても書き方がじょちょうになる程度 を改善するためにラッパーを書きます。 **ProcessScala [#jf3e6498] package test import scala.util.DynamicVariable import java.lang.Process import java.io._ case class ProcessScala(charset :String) { val dynamicvariable= new DynamicVariable[Process](null) var stdout :BufferedReader = null; var stderr :BufferedReader = null; //var stdin :BufferedWriter = null; //デフォルトのキャラクタコードを使う def this() = this("") //自動的にDestroyするProcess def exec(cmd:String)(block : => Unit){ var process :Process = null try { process = Runtime.getRuntime.exec(cmd) stdout = getBufferdReader(process.getInputStream(),"") stderr = getBufferdReader(process.getErrorStream(),"") dynamicvariable.withValue(process){block} } catch { //dir とか 普通に実行させたい case e:java.io.IOException =>{ try { if (cmd.length < 7 || !(cmd.substring(0,6) == "cmd /c")){ //cmd /cを追加してみる process = Runtime.getRuntime.exec("cmd /c " + cmd) stdout = getBufferdReader(process.getInputStream(),"") stderr = getBufferdReader(process.getErrorStream(),"") dynamicvariable.withValue(process){block} //process.waitFor } } catch { case e =>println (cmd + " is exsits?") throw e } } } finally { //子プロセス呼び出し後は,必ず,ストリームを閉じる if (process != null) { process.getErrorStream().close(); process.getInputStream().close(); process.getOutputStream().close(); process.destroy(); } if (stdout != null) { try {stdout.close} catch {case e:IOException => } } if (stderr != null) { try {stderr.close} catch {case e:IOException => } } } } //get dynamic variable's value def $_()={ dynamicvariable.value } def getBufferdReader(is:InputStream, charset :String):BufferedReader = { if (charset == "") { new BufferedReader(new InputStreamReader(is)); } else { try { new BufferedReader(new InputStreamReader(is, charset)); } catch { case e: UnsupportedEncodingException => { throw new RuntimeException(e); } } } } } **processMain.scala [#x75be347] 呼び出し例をあげておきます。 package test object ProcessMain { def main(args: Array[String]): Unit = { var p:ProcessScala = new ProcessScala p.exec("dir"){ var line:String = null while({line = p.stdout.readLine ; line != null}){ println(line) } } } }