java web临时文件删除_什么时候删除Java临时文件?
正如其他答案所述,除非您明確要求,否則使用File.createTempFile()創建的臨時文件將自動刪除。
執行此操作的通用,可移植方法是在File對象上調用.deleteOnExit(),該對象將在JVM終止時調度文件以進行刪除。然而,這種方法的一個小缺點是它只能在VM正常終止時起作用;如果異常終止(即VM崩潰或VM進程被強制終止),該文件可能會被取消刪除。
在Unixish系統(例如Linux)上,通過在打開后立即刪除臨時文件,實際上可以獲得更可靠的解決方案。這是有效的,因為Unix文件系統允許刪除文件(準確地說是unlinked),而它仍然由一個或多個進程保持打開狀態。這些文件可以通過打開的文件句柄正常訪問,它們在磁盤上占用的空間只有在最后一個持有文件打開句柄的進程退出后才會被操作系統回收。
所以這是我所知道的最可靠和最便攜的方法,以確保在程序退出后正確刪除臨時文件:
import java.io.File;
import java.io.RandomAccessFile;
import java.io.IOException;
public class TempFileTest
{
public static void main(String[] args)
{
try {
// create a temp file
File temp = File.createTempFile("tempfiletest", ".tmp");
String path = temp.getAbsolutePath();
System.err.println("Temp file created: " + path);
// open a handle to it
RandomAccessFile fh = new RandomAccessFile (temp, "rw");
System.err.println("Temp file opened for random access.");
// try to delete the file immediately
boolean deleted = false;
try {
deleted = temp.delete();
} catch (SecurityException e) {
// ignore
}
// else delete the file when the program ends
if (deleted) {
System.err.println("Temp file deleted.");
} else {
temp.deleteOnExit();
System.err.println("Temp file scheduled for deletion.");
}
try {
// test writing data to the file
String str = "A quick brown fox jumps over the lazy dog.";
fh.writeUTF(str);
System.err.println("Wrote: " + str);
// test reading the data back from the file
fh.seek(0);
String out = fh.readUTF();
System.err.println("Read: " + out);
} finally {
// close the file
fh.close();
System.err.println("Temp file closed.");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
在Unixish系統上,運行它應該產生類似于以下輸出的內容:
Temp file created: /tmp/tempfiletest587200103465311579.tmp
Temp file opened for random access.
Temp file deleted.
Wrote: A quick brown fox jumps over the lazy dog.
Read: A quick brown fox jumps over the lazy dog.
Temp file closed.
而在Windows上,輸出看起來略有不同:
Temp file created: C:\DOCUME~1\User\LOCALS~1\Temp\tempfiletest5547070005699628548.tmp
Temp file opened for random access.
Temp file scheduled for deletion.
Wrote: A quick brown fox jumps over the lazy dog.
Read: A quick brown fox jumps over the lazy dog.
Temp file closed.
但是,在任何一種情況下,程序結束后臨時文件都不應保留在磁盤上。
Ps。在Windows上測試此代碼時,我發現了一個相當令人驚訝的事實:顯然,僅僅將臨時文件保持為未閉合就足以阻止它被刪除。當然,這也意味著臨時文件正在使用時發生的任何崩潰都會導致它被取消刪除,這正是我們試圖避免的原因。
AFAIK,避免這種情況的唯一方法是確保使用finally塊關閉臨時文件總是。當然,您也可以刪除同一finally塊中的文件。我不確定使用.deleteOnExit()使用{{1}}會有什么好處。
總結
以上是生活随笔為你收集整理的java web临时文件删除_什么时候删除Java临时文件?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rdf mysql持久化l_Redis进
- 下一篇: java socket聊天工具_java