web-dev-qa-db-fra.com

Quand System.getProperty ("Java.io.tmpdir") renvoie-t-il "c:\temp"

Juste curieux de savoir quand System.getProperty("Java.io.tmpdir") renvoie "c:\temp". Selon le Java.io.FileJava Docs

Le répertoire de fichier temporaire par défaut est spécifié par la propriété système Java.io.tmpdir. Sur les systèmes UNIX, la valeur par défaut de cette propriété est généralement "/ tmp" ou "/ var/tmp". sur les systèmes Microsoft Windows, il s’agit généralement de "c:\temp". Une valeur différente peut être attribuée à cette propriété système lorsque la machine virtuelle Java est appelée, mais les modifications apportées par programme à cette propriété n'ont aucun effet sur le répertoire temporaire utilisé par cette méthode.

Mais dans mon cas 

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

Toujours retour-

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

Dans quelles conditions retournera-t-il "c:\temp"

EDITED: Si je change% TEMP% en C:\Temp, je vais obtenir C:\Temp, non? Mais la documentation montre c:\Temp au lieu de C:\Temp. 

87
Ashish Pancholi

Sous MS Windows, le répertoire temporaire est défini par la variable d'environnement TEMP. Sous XP, le répertoire temporaire a été défini par utilisateur comme Paramètres locaux\Temp.

Si vous modifiez votre variable d'environnement TEMP en C:\temp, vous obtenez le même résultat lorsque vous exécutez:

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

118

Si vous définissez

-Djava.io.tmpdir=C:\temp
29
Peter Lawrey

D'une part, lorsque vous appelez l'instruction System.getProperty("Java.io.tmpdir"), Java appelle la fonction GetTempPath. De l'API Win32 en fonction de MSDN :

La fonction GetTempPath vérifie l'existence d'un environnement variables dans l’ordre suivant et utilise le premier chemin trouvé:

  1. Le chemin spécifié par la variable d'environnement TMP.
  2. Le chemin spécifié par la variable d'environnement TEMP.
  3. Le chemin spécifié par la variable d'environnement USERPROFILE.
  4. Le répertoire Windows.

D'autre part, veuillez vérifier les raisons historiques expliquant la coexistence de TMP et TEMP) . Cela vaut vraiment la peine d'être lu.

25
Zakaria

La valeur de la variable d'environnement %TEMP% est souvent spécifique à l'utilisateur et Windows la configure en fonction du compte d'utilisateur actuellement connecté. Certains comptes d'utilisateur peuvent ne pas avoir de profil utilisateur, par exemple lorsque votre processus s'exécute en tant que service sur SYSTEM, LOCALSYSTEM ou un autre compte intégré, ou est appelé par l'application IIS avec l'identité AppPool avec Créer un profil utilisateur option désactivée. Ainsi, même si vous n'écrasez pas explicitement la variable %TEMP%, Windows peut utiliser des dossiers c:\temp ou même c:\windows\temp pour, disons, des comptes d'utilisateur inhabituels. Et ce qui est plus important, le processus peut ne pas avoir de droits d’accès à ce répertoire!

0
Maciek