我有以下文件夹结构:
从解析器中的 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。
输入和输出重定向使用<
和>
由外壳程序(sh、bash 或您正在使用的任何东西)执行。它们在具有此语法的 ProcessBuilder 中不可用,除非您从 ProcessBuilder 调用 shell。
然而,ProcessBuilder 有它自己的支持,用于重定向它开始使用redirectInput
和redirectOutput
方法的进程的输入和输出。以下应该对您有用:
String[] command = {"mylexer"};
ProcessBuilder pb = new ProcessBuilder(command);
pb.redirectInput(new File(path));
pb.redirectOutput(new File("output.txt"));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句