Когда 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\ i.e. %TEMP%
В каких условиях он вернет "c:\temp"
?
EDITED: если я изменю% TEMP% на C:\Temp, тогда я получу C:\Temp, правильно? Но в документации показано c:\Temp вместо C:\Temp.
Ответы
Ответ 1
В MS Windows временный каталог устанавливается переменной окружения TEMP
. В XP временный каталог был настроен для каждого пользователя как локальные настройки \Temp.
Если вы измените переменную среды TEMP на C:\temp
, тогда вы получите то же самое при запуске:
System.out.println(System.getProperty("java.io.tmpdir"));
Ответ 2
Если вы установили
-Djava.io.tmpdir=C:\temp
Ответ 3
С одной стороны, когда вы вызываете инструкцию System.getProperty("java.io.tmpdir")
, Java вызывает функцию API Win32 GetTempPath
.
Согласно MSDN:
Функция GetTempPath проверяет наличие среды переменные в следующем порядке и использует найденный первый путь:
- Путь, указанный переменной среды TMP.
- Путь, указанный переменной среды TEMP.
- Путь, указанный переменной среды USERPROFILE.
- Каталог Windows.
С другой стороны, проверьте исторические причины, по которым сосуществуют TMP
и TEMP
. Это действительно стоит прочитать.
Ответ 4
Значение переменной окружения %TEMP%
часто зависит от пользователя, и Windows устанавливает его в отношении текущей учетной записи пользователя. Некоторые учетные записи пользователей могут не иметь профиля пользователя, например, когда ваш процесс выполняется как служба на SYSTEM
, LOCALSYSTEM
или другой встроенной учетной записи или вызывается приложением IIS с идентификатором AppPool с отключенным параметром Create user profile. Поэтому, даже если вы не перезаписываете переменную %TEMP%
явно, Windows может использовать папки c:\temp
или даже c:\windows\temp
для, скажем, нестандартных учетных записей пользователей. И что более важно, процесс может не иметь прав доступа к этому каталогу!