Когда 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"));

Если вы установите

-Djava.io.tmpdir=C:\temp

С одной стороны, когда вы звоните System.getProperty("java.io.tmpdir") инструкция, Java вызывает функцию Win32 API GetTempPath, Согласно MSDN:

Функция GetTempPath проверяет наличие переменных среды в следующем порядке и использует первый найденный путь:

  1. Путь, указанный в переменной среды TMP.
  2. Путь, указанный в переменной среды TEMP.
  3. Путь, указанный в переменной среды USERPROFILE.
  4. Каталог Windows.

С другой стороны, пожалуйста, проверьте исторические причины того, почему TMP а также TEMP сосуществовать Это действительно стоит прочитать.

Ценность %TEMP% Переменная окружения часто зависит от пользователя, и Windows устанавливает ее с учетом текущей учетной записи пользователя. Некоторые учетные записи пользователей могут не иметь профиля пользователя, например, когда ваш процесс работает как служба на SYSTEM, LOCALSYSTEM или другой встроенной учетной записи, или вызывается приложением IIS с идентификацией AppPool с отключенной опцией Создать профиль пользователя. Так что даже когда не перезаписываешь %TEMP% переменная явно, Windows может использовать c:\temp или даже c:\windows\temp папки для, скажем, необычных учетных записей пользователей. И что более важно, процесс может не иметь прав доступа к этому каталогу!

Другие вопросы по тегам