【发布时间】:2018-04-22 00:42:24
【问题描述】:
我有以下文件夹结构:
- 项目
- 词法分析器
- mylexer(这是一个 C 可执行程序)
- 词法分析器
- 解析器
- MyJavaFile.java
从解析器中的 java 文件中,我想执行 mylexer 程序并等待结果。 我有以下代码:
public static String getTokensFromFile(String path) {
String s = null;
StringBuilder sb = new StringBuilder(path);
try {
Runtime rt = Runtime.getRuntime();
String[] command = {"mylexer", "<", path, ">", "output.txt"};
ProcessBuilder pb = new ProcessBuilder(command);
pb.directory(new File("../Lexer"));
Process pr = pb.start();
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(pr.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(pr.getErrorStream()));
while ((s = stdError.readLine()) != null) {
sb.append(s+"\n");
}
}catch(Exception e) {
System.out.println(e);
}
return (sb.toString().length() > 0)? sb.toString() : "";
}
我没有得到任何结果,程序永远不会结束执行,如果我这样做String[] command = {"./mylexer", "<", path, ">", "output.txt"};它说找不到文件。我怎样才能做到这一点?
我也在我的终端上做了这个
../Lexer/mylexer < /Users/jacobotapia/Documents/Compiladores/Proyecto/Lexer/sample.txt > output.txt
但这不适用于 Java。
【问题讨论】:
-
恕我直言,它可能是重复的,但不是上述问题。 AFAIK,ProcessBuilder 不会自动从“”生成输入/输出重定向。这是一个外壳功能。您必须从 Java 管理 Streams,或者调用执行重定向的 shell 脚本。该脚本可以使用 'path' 参数化为 $1,这应该是最简单的解决方案。