使用Java查找用户独立的TEMP目录

时间:2009-11-10 10:31:56

标签: java windows temporary-directory

当使用用户'LocalService'将Java应用程序作为服务运行时,临时目录(“java.io.tmpdir”)指向'c:/ windows / temp'(例如)。

运行Java应用程序通常会提供'c:/ documents and settings / user / local settings / temp'。

当我的应用程序正常运行时,如何确定用户独立的临时文件夹'c:/ windows / temp'?

谢谢和问候, GHAD

4 个答案:

答案 0 :(得分:1)

我不确定是否有“干净”的方法。

在这种情况下,我可能会专门为Java应用程序创建一个目录,并在属性文件中引用它。

答案 1 :(得分:1)

你可以:

  • 按照St Shadow的建议,依赖于某些环境变量,如%WINDIR%或%SYSTEMROOT%,在末尾添加“\ temp”,并使用它。
  • 或使用JVM的命令行参数将此值作为变量传递给您的应用程序,例如

    -Dmytempdir=%WINDIR%\temp

如您所述,用户可以更改其中任何一个的值 使用System的变量 - >环境变量,但我认为它们对系统没有任何影响,直到重新启动(...?)。

或者...

  • 尝试使用java.util.prefs.Preferences之类的讨厌的东西从注册表中读取值 - 在我的机器上看起来你所追求的值保存在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\TEMP中。

这可能必须非常混乱,我不知道Preferences类是否可以让您访问您需要阅读的密钥。同样,如果用户真的想要,用户更改注册表值也没什么可做的,但我再次怀疑它会在重启后产生任何影响,并且可能会对您的应用产生影响。

干杯, --j

答案 2 :(得分:0)

Java系统属性java.io.tmpdir只指向系统变量%TMP%。 对于普通用户%TMP%指向%HOMEPATH%\ temp,对于其他帐户 - 可以是另一个路径。 您可以尝试使用%SYSTEMROOT%\ temp而不是java.io.tmpdir - %SYSTEMROOT%指向安装了Windows的目录。

答案 3 :(得分:0)

您只需创建自己的临时文件夹,添加deleteOnExit()方法即可确保在应用程序退出时删除此文件夹。