日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java web临时文件删除_什么时候删除Java临时文件?

發布時間:2025/3/21 java 80 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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临时文件?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。