何时 System.getProperty (“ java.io.tmpdir”)返回“ c: temp”

只是好奇什么时候 System.getProperty("java.io.tmpdir")返回 "c:\temp"。根据 Java.io. 文件 Java 文档-

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

但对我来说

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

Always returns-

C:\Users\admin\AppData\Local\Temp\ i.e. %TEMP%

在什么条件下返回 "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.

282957 次浏览

如果你设置

-Djava.io.tmpdir=C:\temp

在微软视窗系统中,临时目录是由环境变量 TEMP设定的。在 XP 中,将每个用户的临时目录设置为“本地设置临时”。

如果你将你的 TEMP 环境变量改为 C:\temp,那么当你运行时你会得到相同的结果:

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

On the one hand, when you call System.getProperty("java.io.tmpdir") instruction, Java calls the Win32 API's function GetTempPath. 根据 MSDN:

GetTempPath 函数检查环境是否存在 variables in the following order and uses the first path found:

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

另一方面,请检查 ABC0与 TEMP并存的历史原因。它真的很值得一读。

%TEMP%环境变量的值通常是特定于用户的,Windows 会根据当前登录的用户帐户来设置它。有些用户帐户可能没有用户配置文件,例如,当您的流程作为服务在 SYSTEMLOCALSYSTEM或其他内置帐户上运行时,或者在禁用了 创建用户配置文件选项的 AppPool 标识的 IIS 应用程序调用时。因此,即使您没有显式地覆盖 %TEMP%变量,Windows 也可以使用 c:\temp或甚至 c:\windows\temp文件夹来处理非常规用户帐户。更重要的是,进程可能没有访问这个目录的权限!