2010-12-08 60 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執行工作的實現。這樣,如果您有更好的解決方案,您可以透明地切換到另一個實施。