在Java中创建大型临时文件的最佳方法是什么,并确保它在磁盘上,而不是在某个RAM中?
如果我使用
Path tempFile = Files.createTempFile("temp-file-name", ".tmp");
然后它适用于小文件,但在我的Linux机器上,它最终存储在/tmp
中。在许多Linux机器上,这是一个由RAM支持的tmpfs文件系统,如果文件很大,将导致麻烦。在这样一个盒子上执行此操作的适当方法是将其放在/var/tmp
中,但硬编码该路径对我来说似乎并不是非常跨平台。
是否有一种良好的跨平台方式在Java中创建临时文件并确保它由磁盘支持而不是由RAM支持?
答案 0 :(得分:0)
没有独立于平台的方法来确定可用磁盘空间。实际上,甚至没有一种依赖于平台的良好方法。发生的事情是zfs文件系统(可能正在动态压缩数据),其他应用程序正在填充的目录,或者只是对您说谎的网络共享。
我知道这些选项:
$XDG_CACHE_HOME
用于缓存;缓存目录应该很好,而且很大(看看使用Linux机器的任何人的~/.cache/
)。在Windows上,您只需使用%TEMP%
,但这没关系,因为%TEMP%
应该还是很大。XDG_CACHE_HOME
(如果它是非空的,则是具有XDG约定的Posix系统),然后是TMP
(如果它是非空的,则是Posix系统,而您不需要有比/tmp
更好的选择),如果是Windows,最后还有TEMP
。