如何在Java中捕获shell命令的退出状态?

2022-09-04 05:47:56

我正在为我的 CSVreader 创建一个 Junit 测试文件。我正在读取CSV文件的内容并将内容写入另一个文件。我想使用 diff 实用程序比较它们,我想使用 diff 的退出状态来了解内容是否相同。通常为 $?给出退出状态,但我不知道如何捕获它并在我的代码中使用它。任何人都可以在这方面帮助我吗?

这就是我的代码的外观

 boolean hasSameContents = false;

    command="diff "+mp.get("directory")+"/"+fileName+" "+mp.get("outdir")+"/"+fileName;
    p= Runtime.getRuntime().exec(command);
    p.waitFor();

在此之后,我想获得退出状态,并在这样的if条件下使用它

 if(exit_status==0)
     hasSameContents = true;
  else
     hasSameContents = false;

甚至其他建议也很感激。:)


答案 1

您正在寻找 Process#exitValue

String command = "diff "+mp.get("directory")+"/"+fileName+" "+mp.get("outdir")+"/"+fileName;
Process p = Runtime.getRuntime().exec(command);
p.waitFor();
int exitStatus = p.exitValue();

别忘了,即使你不在乎,你也应该阅读内容,有些进程会窒息(未完成),直到输出缓冲区被读取...InputStream


答案 2

您可以尝试使用类来创建对象,该对象应该对您有所帮助。ProcessBuilderProcessexitValue()


推荐