java.lang.Runtime.execの正しい姿勢を呼び出します。

2751 ワード

今日はコンパイルを使うプログラムを書きましたが、問題がありました。
  • は、runtime.exec(「javac Hello World.java」)を呼び出しています。完璧な運行、つまり生成があります。クラスです。
  • で、runtime.execに着きました。どうしても出力をリダイレクトできず、output.txtファイルも生成できませんでした。
  • 「echo hello」をテストしてもいいです。1.txt」もいけません。頭が痛くて、資料を閲覧して、やっと
  • を発見しました。
  • の認識上の誤りは、exec(str)の中でstrを完全にコマンドライン実行のcommandと見なしてはいけないということです。特に、strにはリダイレクト''''''''とコンジット'とが含まれてはいけない。
  • じゃ、このような指令があったらどうすればいいですか?私達は引き続き下を見ます。
  • 二つの方法:
  • は、コマンドをスクリプトに書き込み、runtime.exec()でスクリプトを呼び出します。この方法はexec()を使うことを避けました。考え方も一つです。
  • もう一つの方法があります。exec()の積載方法を呼び出します。この方法を重点的に見ます。
  • まずオフィシャルdoc[>linkを見ます。
    1.    public Process exec(String command) throws IOExecption
    
    2.    public Process exec(String command,String [] envp) throws IOExecption
    
    3.    public Process exec(String command,String [] envp,File dir) throws IOExecption
    
    4.    public Process exec(String[] cmdarray) throws IOExecption
    
    5.    public Process exec(String[] cmdarray,String [] envp) throws IOExecption
    
    6.    public Process exec(String[] cmdarray,String [] envp,File dir) throws IOExecption
    文書を見てみると、重いロード方法は4.execが一番簡単で、私達に似合います。公式によると、4.exec()は6.exc(cmdarray、null、null)と同じです。5.exc.(cmdarray、null)も同じです。
  • です。そう書いてもいいです。
  • runtime.exec(new String[]{///bin/bash]、「-c」、「java Hello World>>output.txt」);
    runtime.exec(newString[]“/bin/bash”、“-c”、“java Hello World”>output.txt”);
    runtime.exec(newString[]、「/bin/bash」、「-c」、「java Hello World」>>output.txt」}、null、null);
    ただし、java/home/path/Hello Worldを使用すると、'/'は「.」と解析され、「エラー:見つけられないか、ホストクラスをロードできないか、home.path.Hello World」と報告されます。
    したがって、全パスが使えない場合は、ポリシーを変更して、作業ディレクトリdirにパスを変更します。
    File dir=new File("/home/path/")
    その後、その第6の重積載方法で、dirを第3のパラメータとして渡せば良いです。
    String[]cmdarry={"/bin/bash"、-c"、''java Hello World>>output.txt'
    runtime.exec(cmdarry,null.dir)
    もちろんecho、lsなどの命令は'/'の制限を受けません。
    *BTW,exec()戻り値を取得する標準的な使い方は、runtime.exec()の左腕の右腕です。http://blog.csdn.net/timo1160139211/article/details/75050886
    まとめ:
  • コマンドにリダイレクト''''''とコンジット'が含まれている場合、exec(String command)メソッドは適用されなくなり、exec(String[]cmdAray)またはexec(String[]cmdarray,String envp,Fidir)を使用して実行される必要があります。
    たとえば:
  • exec(「echo hello」ouput.txt)、
  • exec(「history grep-i mvn」)、
  • 変更するべきです
  • exec(newString[]]“/bin/sh”、“-c”、“echo hello”>ouput.txt”);
  • exec(newString[]{/bin/bash]、「-c」、「history grep-i mvn」}、null);
  • 参考資料:
    https://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html
    http://blog.csdn.net/flying881114/article/details/6272472
    http://blog.csdn.net/westwin/article/details/358377
    http://blog.csdn.net/moreorless/article/details/4182883