2017-01-01 6 views
2

コンソールコマンドを実行するJavaアプリケーションを開発しています。実際にコマンドが実行するのは、ファイルを変更した後、そのファイルのコピーを別のフォルダに保存します(ファイルと出力フォルダの両方がユーザーによって指定されます)。そして、私のアプリケーションのローカルリソースであるこれを行うには、いくつかのバイナリプログラムが必要です。Javaアプリケーションでconsole commadを実行する方法は?

だから私のコードのようなものです:

... 
public void actionPerformed(ActionEvent e) { 
    File selectedFile = jFileChooser1.getSelectedFile(); 
    File pathAssigned = jFileChooser2.getSelectedFile(); 

    String file = selectedFile.getAbsolutePath(); 
    String output = pathAssigned.getAbsolutePath(); 
    String name = selectedFile.getName(); 

    // What's next??? 
} 

とコマンドの使用方法/構文のようなものです:

"command -options /package/binary.bin "+file+" "+output+"\\"+name+"-changed" 

だから私の質問は今だろう。私の次のコードは何ですか? Runtimeを使用する必要がありますか?もしそうなら、どのように?

コマンドのローカルリソースパスを含めても、構文は正しいですか?

私はここでもJavaプログラミングだけでなく、まだ初心者ですので、あなたの答え/コメントに親切にしてください。ありがとう!

PS。このコマンドは、途中で独立したプラットフォームです。

答えて

2

下記のコードがお役に立てば幸いです。最初に、パラメータを取るシェルスクリプトがあります。

#!/bin/bash 
echo "hola" 
echo "First arg: $1" 
echo "Second arg: $2" 

/home/dac/proj/javatest2016/src/main/java/myshellScript.shと入力し、Javaコードからパラメータを渡すことができます。

import java.io.*; 

public class Main { 

    public static void main(String[] args) throws Exception { 
     try { 
      ProcessBuilder pb = new ProcessBuilder("/home/dac/proj/javatest2016/src/main/java/myshellScript.sh", "myArg1", "myArg2"); 
      pb.directory(new File("/home/dac/proj/javatest2016/src/main/java")); 
      Process p = pb.start(); 
      StringBuffer output = new StringBuffer(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
      String line = ""; 
      while ((line = reader.readLine())!= null) { 
       output.append(line + "\n"); 
      } 
      System.out.println("### " + output); 
     } catch (Throwable t) { 
      t.printStackTrace(); 
     } 
    } 
} 

テスト

### hola 
First arg: myArg1 
Second arg: myArg2 

enter image description here

+1

はあなたに非常に多くの先生ありがとうございました!私はコードを試しました。まず、 "Hello World"とバッチファイル(私はWindowsで作業しています)を出力する単純なTest.javaを作成して 'javac%1'をコンパイルしました。私は私のアプリケーションでそれを試してみます。 +1は非常に便利です:) –

関連する問題