繁体   English   中英

Java中的Windows临时文件

[英]Windows temporary file in Java

如何在Windows中创建一个使用Java设置属性FILE_ATTRIBUTE_TEMPORARYFILE_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM