2016-07-14 16 views
0

このコードはコマンドラインを実行する必要がありますが、特定のコマンドでのみ機能します。例えば、それは開放してjarファイルを実行するために動作しますが、コマンドを実行するように見えることはできません。Javaプログラムからコマンドを実行する

echo 'Hello World' > HelloWorld.txt 

のHelloWorldと呼ばれるテキストファイルを作成する必要があります。誰かが問題を理解するのを助けることができますか?

public static void command(String command) { 
    try { 
     Process p = Runtime.getRuntime().exec(command); 
     BufferedReader in = new BufferedReader(
          new InputStreamReader(p.getInputStream())); 
     String line = null; 
     while ((line = in.readLine()) != null) { 
      System.out.println(line); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+1

WindowsまたはLinuxをお使いですか?あなたは "本当の"コマンドと "シェル組み込み"の違いを知っていますか?また、Javaでサブプロセスを起動する現代的な方法であるので、 'ProcessBuilder'を読み上げるべきです。 –

答えて

0

問題はあなたのコマンドに>を持っているとexec関数に文字列としてご入力されています。私はexecコマンドがそのようなステートメントを実行できない理由を正確には知りませんが、パイプ|、またはリダイレクト>などを持っていれば、コマンドが文字列入力として与えられたときに処理できません。何をしなければならないことは

public static void command(String command) { 
    try { 
     String[] cmd = {"/bin/sh", "-c" , command }; // you have to input an string array your command will be executed in a new shell. 
     Process p = Runtime.getRuntime().exec(cmd); 
     BufferedReader in = new BufferedReader(
          new InputStreamReader(p.getInputStream())); 
     String line = null; 
     while ((line = in.readLine()) != null) { 
      System.out.println(line); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

新しいシェルプロセスが戻る前に、そこに実行されます(リダイレクトを含む)/ binに/ shの全体コマンドによって作成されます以下のすなわちとして、別のスクリプトとして実行されます。

+0

ありがとうございます! –

+0

@ S.Elmあなたは歓迎.. .. :) – printfmyname

関連する問題