如何在 Java 中运行 Linux 命令?

新手上路,请多包涵

我想创建两个文件的差异。我尝试在 Java 中搜索执行此操作的代码,但没有为此找到任何简单的代码/实用程序代码。因此,我想如果我能以某种方式从我的 java 代码运行 linux diff/sdiff 命令并让它返回一个存储差异的文件,那就太好了。

假设有两个文件 fileA 和 fileB。我应该能够通过我的 java 代码将它们的差异存储在一个名为 fileDiff 的文件中。然后从 fileDiff 中获取数据就没什么大不了的了。

原文由 chitresh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 403
1 个回答

您可以使用 java.lang.Runtime.exec 来运行简单的代码。这会给你一个 Process 并且你可以直接读取它的标准输出而不必暂时将输出存储在磁盘上。

例如,这是一个完整的程序,将展示如何做到这一点:

 import java.io.BufferedReader;
import java.io.InputStreamReader;

public class testprog {
    public static void main(String args[]) {
        String s;
        Process p;
        try {
            p = Runtime.getRuntime().exec("ls -aF");
            BufferedReader br = new BufferedReader(
                new InputStreamReader(p.getInputStream()));
            while ((s = br.readLine()) != null)
                System.out.println("line: " + s);
            p.waitFor();
            System.out.println ("exit: " + p.exitValue());
            p.destroy();
        } catch (Exception e) {}
    }
}

编译运行后输出:

 line: ./
line: ../
line: .classpath*
line: .project*
line: bin/
line: src/
exit: 0

正如预期的那样。

您还可以获取流程标准错误的 错误流,以及流程标准输入的 输出流,这很容易混淆。在这种情况下,输入和输出是相反的,因为它是 流程到这个流程的输入(即流程的标准 _输出_)。

如果您想合并来自 Java 的过程标准输出和错误(而不是在实际命令中使用 2>&1 ),您应该查看 ProcessBuilder

原文由 paxdiablo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题