GHad
GHad

Reputation: 9641

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 normally?

Thanks and greetings, GHad

Upvotes: 2

Views: 6409

Answers (4)

user207794
user207794

Reputation:

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

Upvotes: 1

Lastnico
Lastnico

Reputation: 1471

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.

Upvotes: 0

user7094
user7094

Reputation:

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.

Upvotes: 1

St.Shadow
St.Shadow

Reputation: 1842

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.

Upvotes: 0

Related Questions