什么时候System.getProperty(“java.io.tmpdir”)返回“c:\ temp”

只是好奇当System.getProperty("java.io.tmpdir")返回"c:\temp" 。 根据java.io.File Java Docs –

默认的临时文件目录由系统属性java.io.tmpdir指定。 在UNIX系统上,这个属性的默认值通常是“/ tmp”或“/ var / tmp”; 在Microsoft Windows系统上,它通常是“c:\ temp”。 在调用Java虚拟机时,可能会为此系统属性赋予不同的值,但对此属性的编程更改不能保证对此方法使用的临时目录有任何影响。

但在我的情况下,

 System.out.println(System.getProperty("java.io.tmpdir")); 

总是返回 –

 C:\Users\admin\AppData\Local\Temp\ ie %TEMP% 

在什么情况下会返回"c:\temp"

编辑:如果我将%TEMP%更改为C:\ Temp,那么我将得到C:\ Temp,对不对? 但是文档显示c:\ Temp而不是C:\ Temp。

Solutions Collecting From Web of "什么时候System.getProperty(“java.io.tmpdir”)返回“c:\ temp”"

在MS Windows中,临时目录由环境变量TEMP 。 在XP中,临时目录是按用户设置的本地设置\温度。

如果将TEMP环境变量更改为C:\temp ,则在运行时会得到相同的结果:

System.out.println(System.getProperty("java.io.tmpdir"));

如果你设置

 -Djava.io.tmpdir=C:\temp 

一方面,当你调用System.getProperty("java.io.tmpdir")指令时,Java调用Win32 API的函数GetTempPath 。 根据MSDN :

GetTempPath函数按照以下顺序检查是否存在环境变量,并使用找到的第一个路径:

  1. 由TMP环境变量指定的路径。
  2. 由TEMP环境变量指定的路径。
  3. USERPROFILE环境变量指定的路径。
  4. Windows目录。

另一方面,请查看TMPTEMP为什么共存的历史原因 。 这真的值得一读。

%TEMP%环境变量的值通常是特定于用户的,Windows会针对当前登录的用户帐户进行设置。 某些用户帐户可能没有用户配置文件,例如,当您的进程在SYSTEMLOCALSYSTEM或其他内置帐户中作为服务运行时,或者被禁用了“ 创建用户配置文件”选项的AppPool身份的IIS应用程序调用时。 所以,即使你没有明确地覆盖%TEMP%变量,Windows也可以使用c:\temp甚至c:\windows\temp文件夹,比如说,非常用的用户帐户。 而更重要的是,进程可能没有这个目录的访问权限!