Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to capture the exit status of a shell command in Java?

Tags:

java

exit-code

I'm creating a Junit test file for my CSVreader. I'm reading the contents of CSV files and writing the contents into another file. I want to compare them using diff utility and I want to use the exit status of diff to know whether the contents are same or not. Generally $? gives the exit status but I don't know how to capture it and use it in my code. Can anyone help me in this regard?

This is how my code looks

 boolean hasSameContents = false;

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

After this I want to get the exit status and use it in a if condition like this

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

Even alternative suggestions appreciated. :)

like image 224
Niranjan Subramanian Avatar asked Oct 15 '12 09:10

Niranjan Subramanian


Video Answer


2 Answers

You're looking for 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();

Don't forget, you should read the contents of the InputStream even if you don't care, some processes will choke (not finish) until the output buffer has been read...

like image 187
MadProgrammer Avatar answered Sep 21 '22 05:09

MadProgrammer


You can try using ProcessBuilder class to create a Processobject, whose exitValue() should help you.

like image 35
Aditya Jain Avatar answered Sep 24 '22 05:09

Aditya Jain