Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating a ".bat" file, run it and delete it from Java

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();
like image 541
Maroun Avatar asked Nov 29 '25 16:11

Maroun


2 Answers

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();
like image 171
CloudyMarble Avatar answered Dec 02 '25 05:12

CloudyMarble


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.

like image 42
Chris Knight Avatar answered Dec 02 '25 04:12

Chris Knight