java - 集成命令行软件与Java程序

标签 java design-patterns integration processbuilder

我正在将开源 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 程序的方式看起来是错误的。

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

提前致谢。

最佳答案

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;
}

关于java - 集成命令行软件与Java程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4384904/

相关文章:

java - 如何使用 TDD 方法为简单的购物车示例设计类?

matlab - Matlab 求解器中的相对和绝对公差定义

java - JSF : Elements of ArrayList are not rendered properly?

java - 在没有 IDE 的情况下创建 Maven 项目构建失败

java - 一次性加载配置属性的设计模式?

linux - AppVeyor - Ubuntu 未被识别为图像

java - 每次集成测试后 Spring 上下文变脏

java - 使用 Gson RuntimeTypeAdapterFactory 和 lenient = true 设置

java - 为类中的任何方法运行额外代码

c# - 我如何构建一个包含大量 IF 语句的程序(进程)