我有以下文件夹结构:
从解析器中的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。
答案 0 :(得分:2)
使用<
和>
的输入和输出重定向由shell执行(sh,bash或您正在使用的任何内容)。除非您从ProcessBuilder调用shell,否则它们在ProcessBuilder中不具有此语法。
但是,ProcessBuilder自行支持重定向使用redirectInput
和redirectOutput
方法启动的进程的输入和输出。以下内容适用于您:
String[] command = {"mylexer"};
ProcessBuilder pb = new ProcessBuilder(command);
pb.redirectInput(new File(path));
pb.redirectOutput(new File("output.txt"));