[英]Windows temporary file in Java
如何在Windows中創建一個使用Java設置屬性FILE_ATTRIBUTE_TEMPORARY
和FILE_FLAG_DELETE_ON_CLOSE
的文件?
我確實希望我的文件只是內存文件。
准確地說:delete-on-exit機制不滿足我,因為我想避免一些情況,例如,當某些數據留在磁盤上時,例如應用程序崩潰。
使用這樣的東西。 它不會在內存中,而是在應用程序退出時刪除的臨時文件。
try {
// Create temp file.
File temp = File.createTempFile("pattern", ".suffix");
// Delete temp file when program exits.
temp.deleteOnExit();
// Write to temp file
BufferedWriter out = new BufferedWriter(new FileWriter(temp));
out.write("aString");
out.close();
} catch (IOException e) {
// (..)
}
即使設置了兩個標志,您的文件也可能最終出現在文件系統中。 如果系統緩存變得太小,則將文件寫入磁盤,如果系統崩潰,則不執行進程后清理。
但是,我喜歡你的想法並想知道為什么Windows上的JVM實現默認不使用這些標志。 至少deleteOnExit()應該像這樣實現作為后備。
我確實希望我的文件只是內存文件。
在Windows上將文件標記為臨時文件並在關閉時刪除將無法保證它不會寫入文件系統。
使用UNIX / Linux,您可以在TmpFS或RamFS文件系統中創建該文件; 即將文件存儲在RAM存儲器中的文件系統。 TmpFS由虛擬內存支持,因此RamFS中的部分或全部文件可能最終出現在交換盤上。 RamFS沒有虛擬內存支持,只能駐留在RAM中。
可以在此處找到RamFS和TmpFS的概述。
但請注意,(至少在理論上)RamFS內容最終可能會出現在光盤上。
如果系統進入休眠狀態,則在系統斷電之前將RAM的全部內容保存到光盤。
如果內核可能被引發崩潰並且啟用了內核崩潰轉儲,則內核內存(可能包括RamFS)的內容將被寫入轉儲。
您正在使用特定於Windows的解決方案,因此為什么不使用通過Processbuilder執行的wndows命令創建文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.