如何在Java中运行Linux命令?

2022-08-31 20:09:33

我想创建两个文件的差异。我尝试在Java中搜索可以做到这一点的代码,但没有找到任何简单的代码/实用程序代码。因此,我认为如果我能以某种方式从我的java代码中运行linux diff / sdiff命令并使其返回一个存储diff的文件,那么它将很棒。

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


答案 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 的流程标准输出和错误(而不是在实际命令中使用),则应查看 ProcessBuilder2>&1


答案 2

您还可以编写一个 shell 脚本文件,并从 java 代码中调用该文件。如下图所示

{
   Process proc = Runtime.getRuntime().exec("./your_script.sh");                        
   proc.waitFor();
}

将 linux 命令写入脚本文件,一旦执行结束,您就可以在 Java 中读取 diff 文件。

这种方法的优点是,您可以在不更改Java代码的情况下更改命令。


推荐