使用 exec() 在 Java 中使用 linux 命令调用时遇到困难

Having a hard time with linux command calls in Java with exec()

我正在尝试使用 Runtime.getRuntime().exec() 来调用一个程序,就好像它是从终端调用的一样,但它只是在读取第一个文件后崩溃并出现致命错误。

在终端我运行命令如下:

mace4 -c -f inputFile.in > outputFile.out

它按预期工作,从第一个文件读取并在第二个文件中输出。

在 Java 中,我尝试 运行 这样:

String args[] = new String[]{"mace4", "-c", "-f", inputFileName ,">",outputFileName};
        try {
            String s;
            Process proc = Runtime.getRuntime().exec(args, null, new File("/home/user/workDirectory/"));
            BufferedReader br = new BufferedReader(
                    new InputStreamReader(proc.getInputStream()));
            while ((s = br.readLine()) != null)
                System.out.println("line: " + s);
            proc.waitFor();
            proc.destroy();

一旦程序到达第一个文件的末尾,它就会抛出:

致命错误:read_all_input,文件 > 未找到

这个程序太旧了,我似乎找不到找到更详细的错误的方法..

我尝试用这些参数调用它 {"sh or bash", "-c", "mace4", "-c ", "-f", inputFileName ,">",outputFileName} 这使得程序 运行 然后冻结(或者至少控制台中没有任何显示).. 我是否调用了终端命令错误?如果是,我应该更改什么?

PS: 这是我的第一个问题,如果我遗漏了什么,对不起..

您似乎在尝试使用 Bash 输出重定向运算符 >。这会将您的程序的输出重定向 运行 一个文件(或另一个程序)

This answer 解释了如何使用 ProcessBuilder 执行此操作,它应该适用于您在此处尝试执行的操作。

例如:

ProcessBuilder pb = new ProcessBuilder("mace4", "-c", "-f", inputFileName);
pb.redirectOutput(new File(outputFileName));
Process p = pb.start();