对System.getProperty("java.io.tmpdir")
何时返回"c:\temp"
感到好奇。根据{{3}} java.io.File -
默认临时文件目录由系统属性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\ i.e. %TEMP%
它会在什么条件下返回"c:\temp"
?
编辑:如果我将%TEMP%更改为C:\ Temp然后我会得到C:\ Temp,对吧?但文档显示c:\ Temp而不是C:\ Temp。
答案 0 :(得分:114)
在MS Windows中,临时目录由环境变量TEMP
设置。在XP中,临时目录按用户设置为Local Settings \ Temp。
如果您将TEMP环境变量更改为C:\temp
,那么在运行时会得到相同的结果:
System.out.println(System.getProperty("java.io.tmpdir"));
答案 1 :(得分:30)
如果您设置
-Djava.io.tmpdir=C:\temp
答案 2 :(得分:27)
一方面,当您调用System.getProperty("java.io.tmpdir")
指令时,Java会调用Win32 API的函数GetTempPath
。
根据{{3}}:
GetTempPath函数检查环境是否存在 变量按以下顺序排列并使用找到的第一个路径:
- TMP环境变量指定的路径。
- TEMP环境变量指定的路径。
- USERPROFILE环境变量指定的路径。
- Windows目录。
醇>
另一方面,请检查the MSDN。这真的值得一读。
答案 3 :(得分:0)
%TEMP%
环境变量的值通常是特定于用户的,Windows会根据当前登录的用户帐户对其进行设置。某些用户帐户可能没有用户配置文件,例如,当您的流程在SYSTEM
,LOCALSYSTEM
或其他内置帐户中作为服务运行时,或者由具有的AppPool标识的IIS应用程序调用禁用创建用户配置文件选项。因此,即使您没有明确覆盖%TEMP%
变量,Windows也可能会使用c:\temp
甚至c:\windows\temp
个文件夹,例如,非常规用户帐户。更重要的是,进程可能对此目录没有访问权限!