2013-02-28 75 views
0

我在Java中動態製作.bat創建一個「.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

如果你想確保它在執行後刪除,您應該等待執行完成並刪除它。 – RudolphEst 2013-02-28 13:42:26

+0

如果你有權訪問bat文件,你可以使它[刪除自己](http://stackoverflow.com/q/2888976/238902「如何使.BAT文件完成後自行刪除它?」) – Default 2013-02-28 13:50:13

回答

5

我不會刪除在不同的線程中的文件,如果在您嘗試刪除它時文件執行仍在運行,該怎麼辦?

我會考慮從文件中請求exit code,或者使用process.waitFor(),如果需要,可以使當前線程等待,直到此Process對象表示的進程終止。

Process p = Runtime.getRuntime().exec("cmd /c start a.bat"); 
p.waitFor(); 
file.delete(); 
+0

嗯,什麼一個巧合,你的例子和我的完全一樣... – 2013-07-24 11:30:04

2

試試這會導致代碼等到批處理文件執行完成後再刪除文件。

Process batchFileExecutionProcess = Runtime.getRuntime().exec("cmd /c start a.bat"); 
batchFileExecutionProcess.waitFor(); 
file.delete(); 

理想情況下,你會建立自己的錯誤處理這個解決方案,以及,如尋找從WAITFOR()方法返回0。

1

不,這不是一個好方法。其實我沒有看到額外的線程的任何優勢。它很可能會在cmd仍在使用它時嘗試刪除該文件,並且刪除將失敗。 相反,你應該使用Process對象(的exec()的結果),並等待,直到它完成,刪除文件,然後:

Process p = Runtime.getRuntime().exec("cmd /c start a.bat"); 
p.waitFor(); 
file.delete() 
相關問題