我有一种通过Process
cmd
的方法 public void startCmd(){
try {
Process p = Runtime.getRuntime().exec("cmd");
BufferedReader stdInput = new BufferedReader(newInputStreamReader(p.getInputStream()));
while ((s = stdInput.readLine()) != null)
System.out.println(s);
} catch (IOException e) {
e.printStackTrace();
}
}
我的任务是创建通过命令并基于响应的方式,通过另一个命令。例如:
foo
result: bar, baz
如果结果是baz
,执行A
,并且如果A
在同一过程中返回C
执行D
,我需要在Java中全部执行此操作,则整个操作的结果将在管道下进一步处理。
这可能是某个地方的工具。
您的方法在某种程度上指向正确的方向,但是您离目标很远。
在开始考虑结构之前,我建议您查看如何正确执行一个外部应用程序。
在现代Java中,建议为此使用ProcessBuilder
。在此处查看一些示例代码:https://www.mkyong.com/java/java-processbuilder-examples/
您将找到一个完整的示例,可以从Java调用ping
并读取输出。
掌握了这一点后,您需要用配置将结果汇总。该配置应读成树结构,在其中您在提到的返回条件下到达下一个节点。如果做得好,这部分实际上可以很容易。
您可能想拥有一张包含您结果的地图和某些表示形式如果您收到这样的结果,您想做的动作。
然后,您只执行以下操作:
- 您运行命令
- 您收到命令的结果
- 您会根据结果查找该怎么做
等等....
因此,对于您的示例:
Map<UnqiueResult, Command> registry = new HashMap<>();
registry.add(UniqueResult.BAZ, new Command(A));
registry.add(UniqueResult.C, new Command(D));
如果您还需要区分执行者是谁,因为该结果添加了一个方法来定义注册表映射的密钥。
编辑:
如果您想在相同的过程中进行操作,则必须在输出流上使用作者。请参阅我附加的链接。
(因此,如果您将每个步骤视为独立过程,则可能无需这样做。在这种情况下,您的代码需要了解上下文,但这可能是您命令定义的一部分。(P>
如果您的第一个过程的结果是y/n,则您可以根据结果开始下一个过程。
如果您有进一步的要求,为什么需要将它们添加到您的问题中(