120

只是好奇什么时候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\ i.e. %TEMP%

在什么条件下会返回"c:\temp"

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

4

4 回答 4

139

在 MS Windows 中,临时目录由环境变量设置TEMP。在 XP 中,临时目录为每个用户设置为 Local Settings\Temp。

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

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

于 2013-05-03T05:50:07.567 回答
41

如果你设置

-Djava.io.tmpdir=C:\temp
于 2013-05-03T05:47:23.487 回答
38

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

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

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

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

于 2015-04-18T11:40:30.687 回答
0

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

于 2016-10-27T11:36:22.493 回答