2011-04-25 160 views
0

我想刪除某些文件後某個時間每天說一次。是使用deleteOnExit()爲這個不錯的選擇嗎?還有其他建議嗎?替代方案deleteOnExit

我有一些Flash內容通過讀取存儲在Web服務器根目錄中的一些xml文件來呈現其狀態。這些xmls是在飛行中創建的。現在我想刪除這些文件。如果我可以管理這個使用java

+0

1. DeleteOnExit僅在JVM出口運行 2.它可能導致巨大的內存問題,因爲它將這些內存中的大量緩存存儲在內存中。 3.你能詳細說明這些存儲的位置,它們被用於什麼,它的多線程問題[CRON的問題]等。 – MJB 2011-04-25 18:37:28

回答

2

就我個人而言,我會編寫一個腳本,通過您的目錄來刪除符合條件的文件(例如24小時)並通過cron作業運行它。我可能會在服務器負載最低時運行它。

3
java.io.File.createTempFile(prefix, suffix); 

讓該操作系統的臨時文件管理決定銷燬文件的策略。

+2

這可以工作,除非你在Windows上運行的臨時文件策略是「什麼都不做」。 – 2011-04-25 18:37:36

+1

我已經降低了您的建議,因爲在許多操作系統中沒有臨時文件管理。例如,在運行Tomcat的Windows上,這一切都轉到Tomcat \ temp,甚至不是%TEMP%。在Linux上,是的,它通常會轉到/ tmp子目錄。 – MJB 2011-04-25 18:38:42

+0

Windows有臨時文件管理,如果Tomcat選擇不使用它,這並不意味着它不存在。如果你不知道windows有臨時文件管理,請告訴,爲什麼你知道它是由%TEMP%變量控制的? – 2011-04-25 19:04:05

0

deleteOnExit()的問題是,如果您的應用程序崩潰,文件將永遠保留。我會運行一個線程來定期清理臨時目錄(除了打開的文件)。

0

考慮使用Quartz來安排Java中的操作。您可以按定期計劃掃描目錄中超過24小時的文件,也可以爲24小時後運行的每個文件創建一個新作業。

0

絕對避免File.deleteOnExit。我有一個issue,我在每個API調用中多次調用它。基本上,它將文件附加到文件列表以在退出時清理。 JVM從未退出,因爲它在Web上下文中運行。所以,我有一堆文件的內存泄漏永遠存在。設置一個cronjob或者在完成之後刪除文件會更好。