什么时候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。
在MS Windows中,临时目录由环境variablesTEMP
。 在XP中,临时目录是按用户设置的本地设置\温度。
如果将TEMP环境variables更改为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函数按照以下顺序检查是否存在环境variables,并使用find的第一个path:
- 由TMP环境variables指定的path。
- 由TEMP环境variables指定的path。
- USERPROFILE环境variables指定的path。
- Windows目录。
另一方面,请查看TMP
和TEMP
为什么共存的历史原因 。 这真的值得一读。
%TEMP%
环境variables的值通常是特定于用户的,Windows会针对当前login的用户帐户进行设置。 某些用户帐户可能没有用户configuration文件,例如,当您的进程在SYSTEM
, LOCALSYSTEM
或其他内置帐户中作为服务运行时,或者被禁用了“ 创build用户configuration文件”选项的AppPool身份的IIS应用程序调用时。 所以,即使你没有明确地覆盖%TEMP%
variables,Windows也可以使用c:\temp
甚至c:\windows\temp
文件夹,比如说,非常用的用户帐户。 而更重要的是,进程可能没有这个目录的访问权限!