Интеграция программного обеспечения командной строки с программой Java - PullRequest
0 голосов
/ 08 декабря 2010

Я интегрирую программу с открытым исходным кодом 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-программы.

Есть ли идея решить эту проблему хорошим способом разработки программного обеспечения?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 08 декабря 2010

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 голосов
/ 08 декабря 2010

Я предлагаю вам сначала определить интерфейс для вашей функциональности.Этот интерфейс определяет методы для установки параметров (обязательных / необязательных) и выполнения реальной работы.Для начала вы добавляете реализацию, которая использует ProcessBuilder для выполнения работы.Таким образом, вы можете прозрачно переключиться на другую реализацию, если у вас есть лучшее решение.

...