java windows tempdir

¿Cuándo System.getProperty("java.io.tmpdir") devuelve "c: / temp"



windows tempdir (4)

El valor de la variable de entorno %TEMP% menudo es específico del usuario y Windows lo configura con respecto a la cuenta de usuario actualmente registrada. Algunas cuentas de usuario pueden no tener ningún perfil de usuario, por ejemplo, cuando su proceso se ejecuta como un servicio en SYSTEM , LOCALSYSTEM u otra cuenta integrada, o es invocado por la aplicación IIS con la identidad de AppPool con la opción Crear perfil de usuario deshabilitada. Entonces, incluso cuando no sobrescribe %TEMP% variable explícitamente, Windows puede usar c:/temp o incluso c:/windows/temp carpetas para, digamos, cuentas de usuario no habituales. ¡Y lo que es más importante, el proceso puede no tener derechos de acceso a este directorio!

Solo curiosidad cuando System.getProperty("java.io.tmpdir") devuelve "c:/temp" . De acuerdo con java.io.File java.io.File -

El directorio predeterminado de archivos temporales es especificado por la propiedad del sistema java.io.tmpdir. En sistemas UNIX, el valor predeterminado de esta propiedad es típicamente "/ tmp" o "/ var / tmp"; en sistemas Microsoft Windows es típicamente "c: / temp". Se puede otorgar un valor diferente a esta propiedad del sistema cuando se invoca la máquina virtual Java, pero no se garantiza que los cambios programáticos de esta propiedad tengan ningún efecto sobre el directorio temporal utilizado por este método.

Pero en mi caso-

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

Siempre regresa-

C:/Users/admin/AppData/Local/Temp/ i.e. %TEMP%

¿En qué condiciones devolverá "c:/temp" ?

EDITADO: Si cambio% TEMP% a C: / Temp entonces obtendré C: / Temp, ¿verdad? Pero la documentación muestra c: / Temp en lugar de C: / Temp.


En MS Windows, el directorio temporal se establece mediante la variable de entorno TEMP . En XP, el directorio temporal se estableció por usuario como Configuración local / Temp.

Si cambia su variable de entorno TEMP a C:/temp , obtendrá lo mismo cuando ejecute:

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


Por un lado, cuando llamas a la System.getProperty("java.io.tmpdir") , Java llama a la función GetTempPath la API de GetTempPath . De acuerdo con MSDN :

La función GetTempPath comprueba la existencia de variables de entorno en el siguiente orden y utiliza la primera ruta encontrada:

  1. La ruta especificada por la variable de entorno TMP.
  2. La ruta especificada por la variable de entorno TEMP.
  3. La ruta especificada por la variable de entorno USERPROFILE.
  4. El directorio de Windows.

Por otro lado, compruebe los motivos históricos sobre por qué TMP y TEMP coexisten . Realmente vale la pena leer.


Si configura

-Djava.io.tmpdir=C:/temp