I'm making a .bat dynamically in Java.
After creating the file and exectuing it, I want to delete it.
In order to make sure that delete() will be executing after running the .bat file, I delete the file within a different thread.
Is this a good approach for this task? How would you implement it in a better way?
final File file = new File("run.bat");
file.createNewFile();
PrintWriter writer = new PrintWriter(file, "UTF-8");
writer.println(COMMAND1);
writer.println(COMMAND2);
.... ANOTHER COMMANDS
writer.close();
Runtime.getRuntime().exec("cmd /c start a.bat");
new Thread(new Runnable() {
public void run() {
file.delete();
}
}).run();
I wouldnt delete the file in a different thread, what if the file execution is still running at the time you try to delete it?
I would consider asking the exit code from the file, or use a process.waitFor() which causes the current thread to wait, if necessary, until the process represented by this Process object has terminated.
Process p = Runtime.getRuntime().exec("cmd /c start a.bat");
p.waitFor();
file.delete();
Try this which causes the code to wait until the batch file execution is complete before deleting the file.
Process batchFileExecutionProcess = Runtime.getRuntime().exec("cmd /c start a.bat");
batchFileExecutionProcess.waitFor();
file.delete();
Ideally, you would build error handling into this solution as well, such as looking for a 0 return from the waitFor() method.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With