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


110

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

默认的临时文件目录由系统属性java.io.tmpdir指定。在UNIX系统上,此属性的默认值通常为“ / tmp”或“ / var / tmp”;默认值为“ / 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
en.wikipedia.org/wiki/Temporary_folder查看Wiki,我想您可以C:\Temp通过更改%TEMP%,安装Windows 98或将其传递给来实现java -Djava.io.tmpdir=C:\Temp。:也看看这个stackoverflow.com/questions/3437095/...
bezmax

@Max谢谢MAX。如果将%TEMP%更改为,C:\Temp则将得到C:\Temp。对?但是doc show c:\Temp而不是C:\Temp。:)
Ashish Pancholi

2
我不知道为什么驱动器号对您的应用很重要?
2013年

@AshishPancholi没有送您到那里?
2013年

您链接到的1.4.2 Javadoc已过时。当前的7个Javadoc提到的“典型”目录"C:\\WINNT\\TEMP"
阿卜杜勒

Answers:


128

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

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

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


2
在Windows上,还有一个名为%TMP%的第二个环境变量,有时是使用此变量,而不是%TEMP%,例如,Eclipse的GWT插件使用%TMP%变量。
设得兰群岛

@乔希:您的答案很准确。但是,我不同意您给出的示例:如果用户设置了TMPenv var,TEMP则将被忽略。请参考我的回答,如果您不明白我的意思,请告诉我。
Zakaria


33

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

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

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

在另一方面,请为什么历史原因TMPTEMP共存。确实值得一读。


0

价值%TEMP%环境变量往往是特定于用户和Windows对于当前的用户帐户登录设置它。某些用户帐户可能没有用户配置文件,例如,当您的进程在上作为服务运行时SYSTEMLOCALSYSTEM或在其他内置帐户上运行,或者在禁用了“ 创建用户配置文件”选项的情况下由具有AppPool标识的IIS应用程序调用。因此,即使您没有%TEMP%明确覆盖变量,Windows也会使用文件夹,c:\temp甚至c:\windows\temp可以为非常规用户帐户使用文件夹。更重要的是,进程可能对此目录没有访问权限!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.