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

雅各布

我有以下文件夹结构:

  • 项目
    • 词法分析器
      • mylexer(这是一个 C 可执行程序)
  • 解析器
    • 我的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。

埃尔文·博尔维特

输入和输出重定向使用<>由外壳程序(sh、bash 或您正在使用的任何东西)执行。它们在具有此语法的 ProcessBuilder 中不可用,除非您从 ProcessBuilder 调用 shell。

然而,ProcessBuilder 有它自己的支持,用于重定向它开始使用redirectInputredirectOutput方法的进程的输入和输出以下应该对您有用:

String[] command = {"mylexer"};
ProcessBuilder pb = new ProcessBuilder(command);
pb.redirectInput(new File(path));
pb.redirectOutput(new File("output.txt"));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

“ bash可执行文件”和“ bash -c可执行文件”之间的区别

来自分类Dev

如何使用 C++ 输出可执行文件

来自分类Dev

当隐式规则没有提及可执行文件时,make 如何从 C 源文件构建可执行文件?

来自分类Dev

Python更改Java可执行文件的输出文件夹

来自分类Dev

是否可以分发使用 C 生成的可执行文件的 Java 桌面应用程序?

来自分类Dev

C - 在文件中显示来自 ac 可执行文件的所有行以供调试

来自分类Dev

具有链接的C库的OCaml本机可执行文件

来自分类Dev

刷新基于C / C ++的可执行文件的标准输出消息

来自分类Dev

如何进行Rest API调用以启动Java中的可执行文件

来自分类Dev

C ++更改代码中的输出可执行文件名称

来自分类Dev

在ECLIPSE Java中创建带有外部jar(JXL)的jar可执行文件

来自分类Dev

如何在C程序运行时中正确调用可执行文件?

来自分类Dev

将函数调用添加到64位Visual C ++可执行文件中

来自分类Dev

我想知道如何使用 NSIS 从 C++ 可执行文件中调用函数

来自分类Dev

从 PHP 调用已编译的 C++ 可执行文件以创建套接字

来自分类Dev

GCC和binutils构建-C编译器无法创建可执行文件

来自分类Dev

C ++可执行文件的问题:While循环和If / Else If / Else

来自分类Dev

使用Qt 5,C ++和OpenCV从Linux创建可执行文件

来自分类Dev

用于lib和可执行文件的c ++ CMake项目结构

来自分类Dev

C++ 模板的目标代码是否在可执行文件和动态库中重复?

来自分类Dev

C可执行文件可以在所有操作系统上运行吗?

来自分类Dev

使用C#编译的可执行文件有什么?

来自分类Dev

如果没有 Boost DLL,Visual C++ 可执行文件将无法运行

来自分类Dev

扫描Java可执行文件

来自分类Dev

C ++可执行文件崩溃

来自分类Dev

从可执行文件调用函数

来自分类Dev

JDK Java可执行文件与JRE可执行文件

来自分类Dev

一个可执行文件的“连续” C ++输出作为另一个程序的输入

来自分类Dev

有没有办法直接从Java Unix可执行文件运行.jar文件?

Related 相关文章

  1. 1

    “ bash可执行文件”和“ bash -c可执行文件”之间的区别

  2. 2

    如何使用 C++ 输出可执行文件

  3. 3

    当隐式规则没有提及可执行文件时,make 如何从 C 源文件构建可执行文件?

  4. 4

    Python更改Java可执行文件的输出文件夹

  5. 5

    是否可以分发使用 C 生成的可执行文件的 Java 桌面应用程序?

  6. 6

    C - 在文件中显示来自 ac 可执行文件的所有行以供调试

  7. 7

    具有链接的C库的OCaml本机可执行文件

  8. 8

    刷新基于C / C ++的可执行文件的标准输出消息

  9. 9

    如何进行Rest API调用以启动Java中的可执行文件

  10. 10

    C ++更改代码中的输出可执行文件名称

  11. 11

    在ECLIPSE Java中创建带有外部jar(JXL)的jar可执行文件

  12. 12

    如何在C程序运行时中正确调用可执行文件?

  13. 13

    将函数调用添加到64位Visual C ++可执行文件中

  14. 14

    我想知道如何使用 NSIS 从 C++ 可执行文件中调用函数

  15. 15

    从 PHP 调用已编译的 C++ 可执行文件以创建套接字

  16. 16

    GCC和binutils构建-C编译器无法创建可执行文件

  17. 17

    C ++可执行文件的问题:While循环和If / Else If / Else

  18. 18

    使用Qt 5,C ++和OpenCV从Linux创建可执行文件

  19. 19

    用于lib和可执行文件的c ++ CMake项目结构

  20. 20

    C++ 模板的目标代码是否在可执行文件和动态库中重复?

  21. 21

    C可执行文件可以在所有操作系统上运行吗?

  22. 22

    使用C#编译的可执行文件有什么?

  23. 23

    如果没有 Boost DLL,Visual C++ 可执行文件将无法运行

  24. 24

    扫描Java可执行文件

  25. 25

    C ++可执行文件崩溃

  26. 26

    从可执行文件调用函数

  27. 27

    JDK Java可执行文件与JRE可执行文件

  28. 28

    一个可执行文件的“连续” C ++输出作为另一个程序的输入

  29. 29

    有没有办法直接从Java Unix可执行文件运行.jar文件?

热门标签

归档