0

我正在将开源 c 程序与 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 程序的错误方法。

有什么想法可以通过软件设计的好方法来解决这个问题吗?

提前致谢。

4

2 回答 2

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;
}
于 2010-12-08T07:21:21.113 回答
0

我建议您首先为您的功能定义一个接口。该接口定义了设置参数(强制/可选)和执行实际工作的方法。首先,您添加一个ProcessBuilder用于完成工作的实现。这样,如果您有更好的解决方案,您可以透明地切换到另一个实现。

于 2010-12-08T08:08:54.643 回答