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