我正在将开源 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/