When does System.getProperty("java.io.tmpdir") return "c:\temp"
Just curious as to when System.getProperty("java.io.tmpdir")
returns "c:\temp"
. According to the java.io.File Java Docs-
The default temporary-file directory is specified by the system property java.io.tmpdir. On UNIX systems the default value of this property is typically "/tmp" or "/var/tmp"; on Microsoft Windows systems it is typically "c:\temp". A different value may be given to this system property when the Java virtual machine is invoked, but programmatic changes to this property are not guaranteed to have any effect upon the the temporary directory used by this method.
But in my case-
System.out.println(System.getProperty("java.io.tmpdir"));
Always returns-
C:\Users\admin\AppData\Local\Temp\ i.e. %TEMP%
In what conditions will it return "c:\temp"
?
EDITED: If I change %TEMP% to C:\Temp then I will get C:\Temp, right? But the documentation shows c:\Temp instead of C:\Temp.
Solution 1:
In MS Windows the temporary directory is set by the environment variable TEMP
. In XP, the temporary directory was set per-user as Local Settings\Temp.
If you change your TEMP environment variable to C:\temp
, then you get the same when you run :
System.out.println(System.getProperty("java.io.tmpdir"));
Solution 2:
If you set
-Djava.io.tmpdir=C:\temp
Solution 3:
On the one hand, when you call System.getProperty("java.io.tmpdir")
instruction, Java calls the Win32 API's function GetTempPath
.
According to the MSDN :
The GetTempPath function checks for the existence of environment variables in the following order and uses the first path found:
- The path specified by the TMP environment variable.
- The path specified by the TEMP environment variable.
- The path specified by the USERPROFILE environment variable.
- The Windows directory.
On the other hand, please check the historical reasons on why TMP
and TEMP
coexist. It's really worth reading.