Quand System.getProperty ("java.io.tmpdir") renvoie "c: \ temp"

110

Juste curieux de savoir quand System.getProperty("java.io.tmpdir")revient "c:\temp". Selon la documentation Java java.io.File -

Le répertoire de fichiers temporaires 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 donnée à cette propriété système lorsque la machine virtuelle Java est appelée, mais les modifications programmatiques de cette propriété ne sont pas garanties d'avoir un effet sur le répertoire temporaire utilisé par cette méthode.

Mais dans mon cas-

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

Revient toujours

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

Dans quelles conditions reviendra-t-il "c:\temp"?

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

Ashish Pancholi
la source
4
fr.wikipedia.org/wiki/Temporary_folder En regardant le wiki, je dirais que vous pouvez le faire C:\Tempen changeant% TEMP%, en installant Windows 98 ou en le passant à java -Djava.io.tmpdir=C:\Temp. Consultez également ceci: stackoverflow.com/questions/3437095/…
bezmax
@Max Merci MAX. Si je change% TEMP% en C:\Tempalors j'obtiendrai C:\Temp. Droite? mais doc show c:\Tempau lieu de C:\Temp. :)
Ashish Pancholi
2
Je ne sais pas pourquoi la lettre de lecteur est importante avec votre application?
ajduke
@AshishPancholi ne vous a pas amené là-bas?
ajduke
Le Javadoc 1.4.2 auquel vous vous connectez est obsolète. Le Javadoc 7 actuel mentionne un répertoire "typique" de "C:\\WINNT\\TEMP".
Abdull

Réponses:

128

Dans MS Windows, le répertoire temporaire est défini par la variable d'environnement TEMP. Sous XP, le répertoire temporaire était défini par utilisateur comme Local Settings \ Temp.

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

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

Madhusudan Joshi
la source
2
Sous Windows, il existe une deuxième variable d'environnement appelée% TMP% et c'est celle-ci qui est parfois utilisée, pas% TEMP%, par exemple le plugin GWT pour Eclipse utilise la variable% TMP%.
Wee Shetland
@Joshi: Votre réponse est assez précise. Cependant, je ne suis pas d'accord avec l'exemple que vous avez donné: si l'utilisateur a défini la TMPvariable env, alors le TEMPsera ignoré. S'il vous plaît, référez-vous à ma réponse et faites-moi savoir si vous n'avez pas compris ce que je veux dire.
Zakaria
38

Si vous définissez

-Djava.io.tmpdir=C:\temp
Peter Lawrey
la source
17
Les noms de fichiers Windows ne sont pas sensibles à la casse.
Peter Lawrey
33

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

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

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

D'autre part, veuillez vérifier les raisons historiques pour lesquelles TMPet TEMPcoexister . Cela vaut vraiment la peine d'être lu.

Zakaria
la source
0

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

Maciek
la source