一尘不染

如何在Java中运行Linux命令?

java

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

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


阅读 565

收藏
2020-03-22

共1个答案

一尘不染

你可以java.lang.Runtime.exec用来运行简单的代码。这样可以返回a,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

2020-03-22