Java中的Windows临时文件

时间:2010-05-25 10:31:27

标签: java temporary-files java-io

如何在Windows中创建使用Java设置属性FILE_ATTRIBUTE_TEMPORARYFILE_FLAG_DELETE_ON_CLOSE的文件?

我确实希望我的文件只是内存文件。

准确地说:delete-on-exit机制不能满足我,因为我想避免一些情况,例如,当某些数据留在磁盘上时,例如应用程序崩溃。

5 个答案:

答案 0 :(得分:4)

使用类似的东西。它不会在内存中,而是在应用程序退出时删除的临时文件。

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) { 
// (..)
} 

答案 1 :(得分:2)

为什么不使用内存块即数据结构?创建文件背后的动机是什么?如果您想要一个临时文件,那么temp filedelete on exit会有所帮助。

答案 2 :(得分:1)

即使设置了两个标志,您的文件也可能最终出现在文件系统中。如果系统缓存变得太小,则将文件写入磁盘,如果系统崩溃,则不执行进程后清理。

但是,我喜欢你的想法并想知道为什么Windows上的JVM实现默认不使用这些标志。至少deleteOnExit()应该像这样实现为后备。

答案 3 :(得分:0)

  

我确实希望我的文件只是内存文件。

将文件标记为临时文件并在Windows上删除关闭并不能保证它不会写入文件系统。

使用UNIX / Linux,您可以在TmpFS或RamFS文件系统中创建文件;即,将文件存储在RAM存储器中的文件系统。 TmpFS由虚拟内存支持,因此RamFS中的部分或全部文件可能最终出现在交换盘上。 RamFS不受虚拟内存的支持,只能驻留在RAM中。

可以找到RamFS和TmpFS的概述here

但请注意,(至少在理论上)RamFS内容最终可能会出现在光盘上。

  • 如果系统进入休眠状态,则在系统关闭电源之前,RAM的全部内容都会保存到光盘中。

  • 如果内核可能被引发崩溃并且启用了内核崩溃转储,则内核内存(可能包括RamFS)的内容将被写入转储。

答案 4 :(得分:0)

您正在使用特定于Windows的解决方案,因此为什么不使用通过Processbuilder执行的 wndows 命令创建文件。