开发者

Find user independent TEMP directory with Java

when running a Java application as service with the user 'LocalService', the temp directory ("java.io.tmpdir") points to 'c:/windows/temp' (for example).

Running a Java application normally gives 'c:/documents and settings/user/local settings/temp' instead.

How can I determine the user independent temp folder 'c:/windows/temp' when my application runs开发者_如何学Go normally?

Thanks and greetings, GHad


You could:

  • as suggested by St Shadow, rely on some environment variable such as %WINDIR% or %SYSTEMROOT%, append "\temp" on the end, and use this.
  • or pass in this value to your app as a variable using a commandline argument to the JVM, e.g.

    -Dmytempdir=%WINDIR%\temp

As you mention, the user could change the values of either of these variables using System -> Environment Variables, but I don't think they'd have any affect on the system until a reboot anyway (...?).

Or...

  • try and read the value from the registry using some nasty use of java.util.prefs.Preferences or something -- On my machine it looks like the value you're after is held in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\TEMP.

This would likely have to be quite messy and I don't know if the Preferences class will get you access to the key you'd need to read. Again, there's not much you could do about the user changing the registry value either, if they really wanted to, but again I doubt it would have any affect until after a reboot, and would probably have an impact on more than just your app.

Cheers, --J


I'm not sure there is a 'clean' way of doing this.

In this situation, I would probably create a directory specifically for the Java app and refer to it in a properties file.


Java system property java.io.tmpdir just point to system variable %TMP%. For normal user %TMP% points to %HOMEPATH%\temp, for other account - can be another path. You can try to use %SYSTEMROOT%\temp instead of java.io.tmpdir - %SYSTEMROOT% points to directory, where windows is installed.


You can simply create your own temporary folder, add use the deleteOnExit() method to ensure this folder will be removed at the exit of your application.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜