我想改善一款Java应用的跨平台表现。然而,它的测试套件目前假设存在/tmp
目录。
在Windows平台上,最好的等效位置是什么?注意,我绝对不想假设用户具有管理员权限,但我希望它能在至少XP、Vista和Windows7上运行。
是否存在现有的环境变量或一组首选位置可按优先顺序尝试?
我想改善一款Java应用的跨平台表现。然而,它的测试套件目前假设存在/tmp
目录。
在Windows平台上,最好的等效位置是什么?注意,我绝对不想假设用户具有管理员权限,但我希望它能在至少XP、Vista和Windows7上运行。
是否存在现有的环境变量或一组首选位置可按优先顺序尝试?
java.io.tmpdir
可用于用户的临时目录:File tmp = new File(System.getProperty("java.io.tmpdir"));
File.createTempFile
更可取(无论如何,它在底层使用了tmpdir
系统属性),如果您想要搜索临时文件(例如,从应用程序的先前调用中缓存的数据,这听起来可能是您问题的情况)。您可以通过在命令行上提供运行时覆盖(一个JVM
参数)来更改系统属性的值:-Djava.io.tmpdir=C:\foo\bar
注意:"尾部斜杠"问题可以通过使用相关的File
构造函数来避免,参见下面seth答案中的评论。
String fileName = "foobar.txt"
String tmpPath = System.getProperty("java.io.tmpdir");
File tmpFile;
tmpFile = new File(tmpPath + File.separator + fileName); //possible problem
tmpFile = new File(new File(tmpPath), fileName); //OK!
显然,Windows也有一个DOS
环境变量%TEMP%
,可以从任何脚本中使用。
Why not use java.io.File.createTempFile()
?
createTempFile
方法只是在底层使用了 java.io.tmpdir
属性!请参考 File
的 1668-1676 行。 - oxbow_lakesFile
构造函数,问题就会消失。 - oxbow_lakesWindows 定义了环境变量 TEMP 和 TMP,它们都指向当前用户的临时文件夹。
File.createTempFile("myPrefix","mySuffix")
。如果你坚持要做一些只适用于Windows的事情,你可以使用%temp%
环境变量。