我正在.bat
动态制作Java
。
创建文件并执行后,我想删除它。
为了确保在运行delete()
文件后执行.bat
,我会删除不同线程中的文件。
这是完成此任务的好方法吗?你会如何以更好的方式实现它?
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();
答案 0 :(得分:5)
我不会在另一个线程中删除该文件,如果在您尝试删除它时文件执行仍在运行,该怎么办?
我会考虑从文件中询问exit code,或者使用process.waitFor(),这会导致当前线程在必要时等待,直到此Process对象表示的进程终止。
Process p = Runtime.getRuntime().exec("cmd /c start a.bat");
p.waitFor();
file.delete();
答案 1 :(得分:2)
尝试这样做会导致代码等到批处理文件执行完成后再删除文件。
Process batchFileExecutionProcess = Runtime.getRuntime().exec("cmd /c start a.bat");
batchFileExecutionProcess.waitFor();
file.delete();
理想情况下,您也会在此解决方案中构建错误处理,例如从waitFor()方法中查找0返回。
答案 2 :(得分:1)
不,这不是好方法。实际上我没有看到额外线程的任何优势。很可能它会在cmd
仍在使用文件时尝试删除该文件,删除将失败。
相反,你应该使用Process
对象(exec()
的结果)并等到它完成并删除文件然后:
Process p = Runtime.getRuntime().exec("cmd /c start a.bat");
p.waitFor();
file.delete()