gpt4 book ai didi

java - 从 Java 调用具有输入和输出重定向的 C 可执行文件

转载 作者:太空宇宙 更新时间:2023-11-04 07:56:13 25 4
gpt4 key购买 nike

我有以下文件夹结构:

  • 项目
    • 词法分析器
      • 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。

最佳答案

使用 < 进行输入和输出重定向和 >由 shell(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"));

关于java - 从 Java 调用具有输入和输出重定向的 C 可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49961471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com