什么是/tmp的最佳Windows替代品?

16

我想改善一款Java应用的跨平台表现。然而,它的测试套件目前假设存在/tmp目录。

在Windows平台上,最好的等效位置是什么?注意,我绝对不想假设用户具有管理员权限,但我希望它能在至少XP、Vista和Windows7上运行。

是否存在现有的环境变量或一组首选位置可按优先顺序尝试?


“在Windows平台上,最佳等效位置是什么?” - 在“My Computer”\Properties\Advanced\Environment Variables下检查系统和用户特定的环境变量;通常,“临时文件夹”位于当前用户的本地设置中;旧版本的Windows通常将其默认为Windows下的Temp文件夹;我个人总是将这些文件夹重定向到“C:\Temp”,以便轻松清理。 - Hardryv
oxbow_lakes基本上回答了我应该问的问题。另一个开发人员在测试套件中将路径硬编码到tmp目录,以至于它无法在Windows上运行 - 它既无法写入,也无法搜索和读取测试数据。我正在寻找如何更改设置,以便测试可以在任何平台上运行,而不会对tmp目录的位置做出任何假设。java.io.tmpdir应该就可以解决问题。 - Alex Stoddard
5个回答

31
系统属性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%,可以从任何脚本中使用。


8

他可能正在寻找已经放置在用户临时目录中的文件,而不是创建它们。 - oxbow_lakes
我喜欢当人们硬编码路径并在Microsoft(和其他公司)更改事物时生气...框架调用/SDK是你的朋友。 - Matthew Whited
1
@oxbow_lakes - 我曾经遇到过java.io.tmpdir的问题 http://rationalpi.wordpress.com/2007/01/26/javaiotmpdir-inconsitency/ 不过可能已经改变了,因为我使用Java已经有一段时间了。 - seth
1
createTempFile 方法只是在底层使用了 java.io.tmpdir 属性!请参考 File 的 1668-1676 行。 - oxbow_lakes
然后使用带有父目录和文件名的File构造函数,问题就会消失。 - oxbow_lakes
显示剩余3条评论

2

Windows 定义了环境变量 TEMP 和 TMP,它们都指向当前用户的临时文件夹。


1
你可能会发现TMP仅存在于安装有开发工具的计算机上。 - ChrisW

0
使用 File.createTempFile("myPrefix","mySuffix")

0

如果你坚持要做一些只适用于Windows的事情,你可以使用%temp%环境变量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接