2010-12-08 4 views
0

オープンソースのcプログラムとJavaプログラムを統合しています。Javaプログラムによるインテグレーションコマンドラインソフトウェア

私はJNIを使​​用しようとしましたが、それは適切な方法ではありませんでした。

cプログラムの使用法は以下のとおりです。

program_name argument1 [-a maxSize] [-o maxSizeO] ...... [-P] \ 
      in.txt in1.dat in2.dat in1.tmp in2.tmp out.txt 

このように、このプログラムはProcessBuilderクラスを使用して実行できます。

ProcessBuilder pb = new ProcessBuilder("program_name", 
             "argument1", 
             "-a", maxSize, 
             "-o", maxSizeO........., 
             int2.tmp, out.txt); 
Process p = pb.start(); 

しかし、オプションの引数がたくさんあるので、Javaプログラムを維持する方法が間違っているように見えます。

ソフトウェア設計の良い方法でこの問題を解決する考えはありますか?

ありがとうございます。

答えて

2

ProcessBuilderは、必要なものです。私はちょうどあなたのためにいくつかのコードスケルトンを書いています。それを持って、必要に応じて修正してください。

public Process exec(  
     String programName, 
     Integer maxSize, 
     Integer maxSizeO, 
     String[] inFiles, 
     String outFile) throws IOException { 


    ProcessBuilder pb = new ProcessBuilder(); 

    List<String> cmd = new ArrayList<String>(); 
    cmd.add(programName); 
    if (maxSize != null) { 
     cmd.add("-a"); 
     cmd.add("" + maxSize); 
    } 
    if (maxSizeO != null) { 
     cmd.add("-o"); 
     cmd.add("" + maxSizeO); 
    } 
    if (inFiles != null) { 
     cmd.addAll(Arrays.asList(inFiles)); 
    } 
    if (outFile != null) { 
     cmd.add(outFile); 
    } 

    Process p = pb.start(); 

    return p; 
} 
0

まず、機能のためのインターフェイスを定義することを提案します。このインタフェースは、パラメータを設定する(必須/オプション)メソッドと、実際の作業を行うメソッドを定義します。まず、ProcessBuilderを使用する実装を追加して作業を行います。より良いソリューションがあれば、透過的に別の実装に切り替えることができます。

関連する問題