2016-06-19 8 views
-1

問題があります。Java経由でUNIXでコマンドラインを実行しています

openssl md5 "./build/outputs/apk/myApp.apk" 

私は必要な結果を得るので、opensslはうまく動作します。 は、次にJavaでの私のコードがある:

String md5_cmd = "openssl md5 \"./build/outputs/apk/myApp.apk\""; 

String md5Str = obj.executeCommand(md5_cmd); 
String whichCmd = obj.executeCommand("which openssl"); //For testing executeCommand 

System.out.println(md5Str); //Not prints anything 
System.out.println(whichCmd); //Prints the result just Fine  

private String executeCommand(String command) { 

    StringBuffer output = new StringBuffer(); 

    Process p; 
    try { 
     p = Runtime.getRuntime().exec(command); 
     p.waitFor(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 

        String line = "";   
     while ((line = reader.readLine())!= null) { 
      output.append(line); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return output.toString(); 

} 

だから、私はそのOKコマンドラインから直接実行する場合も、任意の出力を示していない「md5_cmd」との最初のコマンド。 "whichCmd"の2番目のコマンドは期待通りに機能します。アドバイスできますか?

+0

を使用して実行されなければならないの引数を持つコマンド、このコードはUNIX上でWindowsでうまく動作しますが、ではありません – Dim

答えて

1

の代わりに単一の文字列

String md5_cmd = "openssl md5 \"./build/outputs/apk/myApp.apk\""; 

でコマンドを実行しますのでご注意くださいString []型

String[] md5_cmd = {"openssl", "md5", "./build/outputs/apk/myApp.apk"}; 
+0

Runtime.getRuntime()。exec'の場合はありません – SerCe

+0

[Javadoc](https://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#exec(java .lang.String [])) – Sanjeev

+0

代わりにソースを参照してください。http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/68 7fd7c7986d/src/share/classes/java/lang/Runtime.java#l446。または、必要に応じてjavadocを別のメソッドhttps://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#exec(java.lang.String)に転送する - より正確には、command文字列は、新しい文字列カテゴリをさらに変更することなく、新しいStringTokenizer(コマンド)の呼び出しによって作成されたaStringTokenizerを使用してトークンに分割されます。トークナイザによって生成されたトークンは、新しい文字列配列cmdarrayに同じ順序で配置されます – SerCe

関連する問題