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


Solo curiosidad cuando System.getProperty("java.io.tmpdir") devoluciones "c:\temp". De acuerdo con la java.io.File  Documentos de Java-

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 regresará? "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.


76
2018-05-03 05:40


origen


Respuestas:


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, entonces obtienes lo mismo cuando corres:

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


87
2018-05-03 05:50



Si configura

-Djava.io.tmpdir=C:\temp

27
2018-05-03 05:47



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

La función GetTempPath comprueba la existencia de un entorno   variables en el siguiente orden y usa 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 las razones históricas de por qué TMP y TEMP coexistir. Realmente vale la pena leer.


23
2018-04-18 11:40



Valor de %TEMP% la variable de entorno a menudo es específica del usuario y Windows la configura con respecto a la cuenta de usuario actualmente registrada. Algunas cuentas de usuario pueden no tener perfil de usuario, por ejemplo, cuando su proceso se ejecuta como un servicio en SYSTEM, LOCALSYSTEM u otra cuenta integrada, o es invocada por la aplicación IIS con la identidad de AppPool con Crear perfil de usuario opción desactivada 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!


0
2017-10-27 11:36